派生类重载的运算符为什么不可以对基类对象使用?
憋看了,年轻时不够机智
已经用派生类对象给一个空的基类对象赋值,而且此时已经对派生类重载了运算符<<,然而编译时还是会报错。
查看地址时,被赋值后的基类对象的地址和用来赋值的派生类对象的地址时一模一样的。而且<<可以用于后者,即用来赋值的派生类对象,所以运算符的重载的代码是没有错的。
代码如下,triangle, rectangle和cube类都是shape类的派生类
shape * base;
if (n==1)
{
for (int i=0; i<9; i++) cin>>location[i];
triangle tmp(location[0],location[1],location[2],location[3],location[4],location[5],
location[6],location[7],location[8]);
cout<<"&tmp is"<<tmp<<endl;
base=&tmp;
}
if(n==2)
{
for (int i=0; i<6;i++) cin>>location[i];
cin>>width>>height;
rectangle tmp(location[0],location[1],location[2],location[3],location[4],location[5]
,width,height);
//base=&tmp;
}
if(n==3)
{
for (int i=0; i<3; i++) cin>>location[i];
cin>>width;
cube tmp(location[0],location[1],location[2],width);
}
cout<<"*base is"<<*base<<endl;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论