什么';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=; 
};