gpt4 book ai didi

C++继承问题

转载 作者:太空宇宙 更新时间:2023-11-04 15:09:30 25 4
gpt4 key购买 nike

我有一个问题:

class A
{
int a;
int* pa;
public:
A(int i):a(i) , pa(new int(a))
{
cout<<"A ctor"<<a<<endl;
}
~A()
{
delete pa;
cout<<"dtor\n";
}
int * &get()
{
return pa;
}
};

class B : public A
{
int b;
public:
B (A obj): A(obj) , b(0)
{
cout<<"B ctor\n";
}
~B()
{
cout<<"B dtor\n";
}
};

int main()
{
int i = 23 ;
A* p = new B(i);
}

可以告诉我为什么 main 中的最后一行可以编译吗?我将一个 int 传递给 B 的构造函数,它需要一个 A 对象。我相信 intB 的构造函数中被转换为 A,但为什么呢?

提前致谢。

艾芙丽。

最佳答案

由于您尚未将 A 构造函数声明为 explicit 编译器正在使用 i 创建 A 的匿名实例并用它来初始化 B 实例。如果您不希望编译器执行这些隐式转换,请将您的构造函数声明为 explicit。然后你会得到一个编译器错误。

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

25 4 0
文章推荐: c++ - 关于对象生命周期和释放责任的问题
文章推荐: html - 图片底部和边框之间的空间从哪里来
文章推荐: html - 如何保持