读书人

*关于继承的有关问题?

发布时间: 2012-02-21 16:26:23 作者: rapoo

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

读书人网 >C++

热点推荐