qq_37296877 2017-06-10 12:03 采纳率: 61%
浏览 923
已采纳

c++, 为什么显示的是c2, 不报错

#include
#include
#include
using namespace std;

class c1
{
public:
c1() {
cout << "c1 构造函数" << endl;
}
virtual void function() = 0;
virtual ~c1() {
cout << "c1 析构函数" << endl;
}
};

class c2:public c1
{
public:
c2() {
cout << "c2 构造函数" << endl;
}
void function()
{
cout << "我是c2" << endl;
}
virtual ~c2() {
cout << "c2 析构函数" << endl;
}
};

class c3:public c2
{
public:
c3(){
cout << "c3 构造函数" << endl;
}
//void function()
//{
// cout << "我是c3" << endl;
//}
virtual ~c3(){
cout << "c3 析构函数" << endl;
}
};
int main(void)
{
cout << "构造函数" << endl;
cout << "***********************" << endl;
c1 *p = new c3;

cout << "调用的函数" << endl;
p->function();
cout << endl;
cout << "析构函数" << endl;
delete[] p;
system("pause");
return 0;

}

  • 写回答

1条回答 默认 最新

  • 战在春秋 2017-06-10 12:20
    关注
     virtual void function() = 0;  // function()是纯虚函数,在子类中必须重新定义functioin函数。
    

    c2继承自c1,并重新定义了function函数。
    c3继承自c2,function()函数也继承下来了。

    因此:

     p->function(); //调用c2中function()函数,输出"我是c2"。
    

    如果把c3类中function函数的注释去掉,刚c3类中function函数会覆盖父类c2的function函数,
    这里再运行程序就会输出:"我是c3"

    用心回答每个问题,如果对您有帮助,请采纳答案好吗,谢谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?