什么';s不是继承给C++;派生类?显然,operator=和一些构造函数实际上是继承的 我试图学习C++继承,但有一件事对我来说毫无意义。 Google搜索到的所有关于派生类未继承的内容都表明构造函数、friends和operator=未被继承。但是,这些信息与我的课程结果不符
我做了一个继承的例子,结果如下:什么';s不是继承给C++;派生类?显然,operator=和一些构造函数实际上是继承的 我试图学习C++继承,但有一件事对我来说毫无意义。 Google搜索到的所有关于派生类未继承的内容都表明构造函数、friends和operator=未被继承。但是,这些信息与我的课程结果不符,c++,c++11,inheritance,constructor,C++,C++11,Inheritance,Constructor,我做了一个继承的例子,结果如下: #包括 使用名称空间std; 阶级基础 { 公众: Base() { coutDervied没有构造函数,在这种情况下会生成一个默认构造函数,它调用所有基类和成员的默认构造函数 复制构造函数和赋值运算符也会发生类似的情况。自动生成的派生类版本正在调用基类版本 这与构造函数或赋值运算符的继承无关。类不会自动继承构造函数,尽管您可以使用语句强制它们为基类的构造函数提供: class Derived: public Base { public: // F
#包括
使用名称空间std;
阶级基础
{
公众:
Base()
{
coutDervied没有构造函数,在这种情况下会生成一个默认构造函数,它调用所有基类和成员的默认构造函数
复制构造函数和赋值运算符也会发生类似的情况。自动生成的派生类版本正在调用基类版本
这与构造函数或赋值运算符的继承无关。类不会自动继承构造函数,尽管您可以使用
语句强制它们为基类的构造函数提供:
class Derived: public Base
{
public:
// Force this class to provide the base class's constructors
using Base::Base;
// Force this class to provide the base class's assignment operator
using Base::operator=;
};
复制构造函数也没有被继承。相反,编译器会自动为派生类生成一个复制构造函数。如果类的所有成员变量和基类都是可复制的,则类本身是可复制的,并且它会自动生成复制构造函数
同样的规则也适用于赋值运算符:如果类的所有成员都提供一个复制赋值运算符,编译器会自动为类本身生成一个。根据标准,复制/移动构造函数是例外
参考本标准:
对于继承的候选集合中的每个非模板构造函数
构造函数,而不是没有参数或
复制/移动构造函数如果只有一个参数,则
使用相同的构造函数特征隐式声明,除非
中有一个具有相同签名的用户声明构造函数
出现using声明或构造函数的完整类
将是该类的默认、复制或移动构造函数
PS.Base和operator=(常量Base和Base)
不是构造函数。它是赋值函数。因此它与任何其他成员函数一样工作。因为在您的示例中它是公共的,所以它被继承了。嗨!好吧,您有一些普通的类,继承了。的确,运算符和构造函数没有被继承,但只要您没有实现其中任何一个,编译器就会生成它们的de故障版本(在这种情况下,他可以做到)。因此,这些默认版本调用了基类中写入cout的所有内容。实际上,这是一个正确的行为。请阅读有关默认类成员的详细信息并重写它们=)此答案可能的重复项是不正确的。您引用的部分是关于继承使用using语句得到的构造函数。OP没有这样做在这种情况下,它不适用。
class Derived: public Base
{
public:
// Force this class to provide the base class's constructors
using Base::Base;
// Force this class to provide the base class's assignment operator
using Base::operator=;
};