继承中的重载问题,求指教!!!

ilovecpp111 2016-07-04 06:46:01
Shape * shapes[4];

// initialize vector with Shapes
shapes[ 0 ] = new Circle( 3.5, 6, 9 );
shapes[ 1 ] = new Square( 12, 2, 2 );
shapes[ 2 ] = new Sphere( 5, 1.5, 4.5 );
shapes[ 3 ] = new Cube( 2.2 );

// output Shape objects and display area and volume as appropriate
for ( int i = 0; i < 4; i++ )
{cout << *( shapes[ i ] ) << endl;}

Shape类被Circle 等四个类继承,现在需要重载<< 而我想用虚函数virtual来对<<进行重载,但是重载的函数不能被同时声明为
friend和virtual ,,,请问这个问题要怎么解决?
...全文
114 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zycxnanwang 2016-07-05
  • 打赏
  • 举报
回复
引用 1 楼 iyomumx的回复:
class Shape
{
public:
    virtual ostream& print(ostream& os) const { /*子类重写这个函数*/ }
    friend ostream& operator<<(ostream& os, const Shape& obj) { return obj.print(os); }
};
学习了,,,,
ilovecpp111 2016-07-04
  • 打赏
  • 举报
回复
引用 5 楼 yuzhe22 的回复:
[quote=引用 1 楼 iyomumx 的回复:]
class Shape
{
public:
    virtual ostream& print(ostream& os) const { /*子类重写这个函数*/ }
    friend ostream& operator<<(ostream& os, const Shape& obj) { return obj.print(os); }
};
你都在类中写了,你还用友员干吗?[/quote] 在类中也必须要用友元
yuzhe22 2016-07-04
  • 打赏
  • 举报
回复
引用 1 楼 iyomumx 的回复:
class Shape
{
public:
    virtual ostream& print(ostream& os) const { /*子类重写这个函数*/ }
    friend ostream& operator<<(ostream& os, const Shape& obj) { return obj.print(os); }
};
你都在类中写了,你还用友员干吗?
ilovecpp111 2016-07-04
  • 打赏
  • 举报
回复
引用 1 楼 iyomumx 的回复:
class Shape
{
public:
    virtual ostream& print(ostream& os) const { /*子类重写这个函数*/ }
    friend ostream& operator<<(ostream& os, const Shape& obj) { return obj.print(os); }
};
virtual ostream& print(ostream& os) const { /*子类重写这个函数*/ } 这个函数要renturn什么呢?是要return os吗?
flying_music 2016-07-04
  • 打赏
  • 举报
回复
引用 1 楼 iyomumx 的回复:
class Shape
{
public:
    virtual ostream& print(ostream& os) const { /*子类重写这个函数*/ }
    friend ostream& operator<<(ostream& os, const Shape& obj) { return obj.print(os); }
};
长见识了
dustpg 2016-07-04
  • 打赏
  • 举报
回复
struct Shape {
    virtual ~Shape() noexcept { }
    virtual void out(std::ostream& os) const = 0;
};

auto operator <<(std::ostream& os, const Shape& s) -> std::ostream& {
    s.out(os); return os;
}
建议这样写(返回void),返回 std::ostream这个对象本身就是为了方便代码编写,也方便编译器优化, 假设那个虚函数返回这个对象(std::ostream),不方便编译器优化..
iyomumx 2016-07-04
  • 打赏
  • 举报
回复
class Shape
{
public:
    virtual ostream& print(ostream& os) const { /*子类重写这个函数*/ }
    friend ostream& operator<<(ostream& os, const Shape& obj) { return obj.print(os); }
};

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧