C++ 如果构造函数的参数与父类相同,子类是否应该重写构造函数?

C++ 如果构造函数的参数与父类相同,子类是否应该重写构造函数?,c++,class,inheritance,visual-c++,constructor,C++,Class,Inheritance,Visual C++,Constructor,我正在使用VC++ 我定义了一个父类: class A { A(); A(int a); virtual ~A(); virtual void DoSomething(); } 然后定义一个子类: class B: public A { virtual void DoSomething(); } 在B类中,仅引入了剂量测量的新版本。所有其他函数,包括构造函数和析构函数,都与A相同 例如,以下两个构造函数都适用于B: B MyB; B MyB(1); 在这种

我正在使用VC++

我定义了一个父类:

class A
{
   A();
   A(int a);

   virtual ~A();

   virtual void DoSomething();
}
然后定义一个子类:

class B: public A
{
   virtual void DoSomething();
}
在B类中,仅引入了剂量测量的新版本。所有其他函数,包括构造函数和析构函数,都与A相同

例如,以下两个构造函数都适用于B:

B MyB;
B MyB(1);
在这种情况下,是否需要创建构造函数B()和B(int a)

我试图在B()中禁用构造函数和析构函数,希望它可以从A继承,但编译器将报告以下错误:

B MyB(1);

默认构造函数
B::B()
将是,而
B::B(int)
不会。您可以显式地定义一个,或者使用for应用
(从C++11开始)

如果using声明引用所定义类的直接基的构造函数(例如,
using base::base;
),则在初始化派生类时,该基的所有构造函数(忽略成员访问)对重载解析都是可见的


在另外两个注释中,
virtual
关键字只在最顶层的基类中需要。我真的建议您在重写函数时使用特殊标识符
override
(如
类B:public A{public:void DoSomething()override;};
)@Someprogrammerdude,对不起,我已经修复了错误。B继承了.Ac疚但使用BASIC::BASIC似乎不能用于Visual C++ 2008?@ Alalc抱歉,它是C++ 11的特性。VC 2008绝对不支持它。我认为你必须自己定义
B::B(int)
class B : public A
{
   using A::A;
   virtual void DoSomething();
}