gpt4 book ai didi

c++ - C++中的继承

转载 作者:行者123 更新时间:2023-11-30 02:07:46 25 4
gpt4 key购买 nike

我正在研究 C++ 中的继承,想知道是否有人对它的工作方式有任何见解。代码如下

#include <iostream>
using namespace std;

class AA {
int aa;
public:
AA() {cout<<"AA born"<<endl;}
~AA(){cout<<"AA killed"<<endl;}
virtual void print(){ cout<<"I am AA"<<endl;}
};

class BB : public AA{
int bb;
public:
BB() {cout<<"BB born"<<endl;}
~BB() {cout<<"BB killed"<<endl;}
void print() {cout<<"I am BB"<<endl;}
};

class CC: public BB{
int cc;
public:
CC() {cout<<"CC born"<<endl;}
~CC(){cout<<"CC killed"<<endl;}
void print() {cout<<"I am CC"<<endl;}
};


int main()
{
AA a;
BB b;
CC c;
a.print();
b.print();
c.print();
return 0;
}

所以我明白,当你继承某些东西时,你会继承构造函数和析构函数。所以当我这样做时,“BB b”会打印“AA born”。所以我的问题

  1. 是否创建了AA实例
  2. 如果是,它叫什么名字,我该如何引用它?
  3. 如果不是,为什么要调用构造函数

最佳答案

继承实现了“IS-A”关系。因此,每个 BB 也是一个 AA

您可以通过多种方式看到这一点,最容易证明的是:

BB b;
AA *aptr = &b;

这里你的 BB 实例 b 被一个只认为自己指向 AA 的指针指向。如果 BB 没有继承自 AA 那么那将是不合法的。

有趣的是,当你打电话时:

aptr->print();

它仍然打印“我是 BB”,尽管事实上您使用的指针是 AA * 类型。发生这种情况是因为 print() 方法是 virtual(即多态)并且您使用的是指针。 (引用也会发生同样的情况,但类型必须是发生此行为的类型之一)

关于c++ - C++中的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7506086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com