***********关于继承的问题?*************
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)引用相对于指针的优点,楼主需要了解一下。比如,指针为空的情况……