c ++继承问题

0 c++ inheritance explicit-constructor rule-of-three

我对此有疑问:

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);
}
Run Code Online (Sandbox Code Playgroud)

可以告诉我为什么最后一行main编译?我传递一个int进入B的构造,其预期的A目的,而不是.我相信它int被翻译成了一个Ain B的构造函数,但为什么呢?

提前致谢.

Avri.

Nav*_*een 5

由于您没有声明A构造函数explicit编译器创建的anomymous情况下A使用i,并使用它来初始化B实例.如果您不希望编译器执行这些隐式转换,请将您的costructor声明为explicit.然后你会得到一个编译器错误.