C++ 如果构造函数的参数与父类相同,子类是否应该重写构造函数?
我正在使用VC++ 我定义了一个父类: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); 在这种
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();
}