首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

*关于继承的有关问题?

2012-02-21 
***********关于继承的问题?*************classRecord{}classA::publicRecord{chara}classB::publicRec

***********关于继承的问题?*************
class   Record
{

};

class   A::public   Record
{
char   a;

};

class   B::public   Record
{
int   b;

};
//   A,B   都是继承   Record   ,我想重载 < <     来达到   动态输出对象成员数据的目的
ostream&   operator < <(ostream&   o,   const   Record   *oRecord);
如:
Record   *pRecord   =   new   A;
cout   < <   pRecord   < <   endl;
输出   a   的值.   如果new   B   类   的话则输出   b

怎么实现,谢谢?




[解决办法]
第一,必须ostream& operator < <(ostream& o, const Record & oRecord);
第二,Record必须通过virtual的输出接口,比如叫
virtual void print(ostream& o);

[解决办法]
class Record
{
public:
public virtual void print(ostream& o){}
};
class A::public Record
{
char a;
public:
virtual void print(ostream& o)
{
o < < a;
}
};

class B::public Record
{
int b;
public:
virtual void print(ostream& o)
{
o < < b;
}
};

ostream& operator < <(ostream& o, const Record & oRecord)
{
oRecord.print(o);
}
[解决办法]
你编译运行一下不就知道了。
[解决办法]
class Record
{
public:
virtual void print(ostream& o) = 0;
};

class A::public Record
{
char a;
public:
virtual void print(ostream& o) { o < < a; }
};

class B::public Record
{
int b;
public:
virtual void print(ostream& o) { o < < b; }
};
// A,B 都是继承 Record ,我想重载 < < 来达到 动态输出对象成员数据的目的
ostream& operator < <(ostream& o, const Record& oRecord)
{
oRecord.print(o);
return o;
}
[解决办法]
class Record
{
public:
virtual void print(ostream& o) const = 0;
};

class A::public Record
{
char a;
public:
virtual void print(ostream& o) const { o < < a; }
};

class B::public Record
{
int b;
public:
virtual void print(ostream& o) const { o < < b; }
};
// A,B 都是继承 Record ,我想重载 < < 来达到 动态输出对象成员数据的目的
ostream& operator < <(ostream& o, const Record& oRecord)
{
oRecord.print(o);
return o;
}
[解决办法]
int main(int argc, char* argv[])
{
A aa;
B bb;
aa.a = 'k ';
bb.b = 3;

Record* p1 = & aa;
Record* p2 = & bb;

cout < <p1 < < " " < <p2 < < endl;

return 0;
}

主函数在vc6下编不过,g++是好的

VC++ 6 has issues with friend classes where perfectly legitimate code will fail to compile. I recommend getting another compiler, because it 's just not worth the effort to work around all of the problems with that one.
------解决方案--------------------


1)习惯使然,有些经验的程序员一般都直接写出“引用”的版本。
2)引用相对于指针的优点,楼主需要了解一下。比如,指针为空的情况……

热点排行