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

基类和派生类都重载了<<符后,怎么让一个派生类对象

2013-12-15 
基类和派生类都重载了符后,如何让一个派生类对象调用基类中的符?比如有这么两个类:class Base{public:

基类和派生类都重载了<<符后,如何让一个派生类对象
调用基类中的<<符?

比如有这么两个类:


class Base
{
public:
friend ostream& operator <<(ostream& outs, const Base& the_object);
private:
int a;
};

class Derived: public Base
{
public:
friend ostream& operator <<(ostream& outs, const Derived& the_object);
private:
int b;
};


其中第一个<<输出a,而第二个<<输出a和b

假设有一个Derived的对象为x,那么
cout << x;
调用的就是Derived中的<<;但是如果我想使得上述语句调用Base中的<<,那么可能吗?

还有一个问题是,在Derived中的<<的定义中,能否直接使用Base中的<<?如果可以,怎么使用?如果不可以,那么Derived中的<<该如何定义?
[解决办法]
引用:
Quote: 引用:


cout << Base(x);
...


那就是强制类型转换咯


其实我不确定编译器会怎么做,手头上没有编译器

我感觉有可能可以,你试试看
[解决办法]
引用:
Quote: 引用:


你应该在派生类友元函数里去实现  是吧


完了完了,这种方法不适用于>>运算符啊!这可咋整啊?

outs<<static_cast<const Base&>(the_object)

前面提到的Base(x)这个实在是太那个啥……
[解决办法]
运算符重载是语法糖。
语法糖越甜,编译调试查错越苦!

[解决办法]
派生类可以自动截取为base &,无需2个重载。

热点排行