构造函数和析构函数继承
Constructor and Destructor Inheritance
我认为base class
中的Constructors
和Destructors
不能被基类的derived classes
继承。
你的理解是正确的。例如,如果您有
class Base
{
Base(int i) {}
};
class Derived: public Base {};
Derived d(3);
这将无法编译,因为Base构造函数没有被继承。请注意,如果可能的话,默认构造函数和复制构造函数是由编译器创建的,并调用基类的相应构造函数,因此对于这些构造函数,看起来就好像是继承的。
我想这就是你要找的?可以通过在类构造函数
中添加以下代码来调用超类构造函数SubClass(int foo, int bar)
: SuperClass(foo)
一个完整的例子可以在这里找到调用超类构造函数的规则是什么? 相反,派生类的每个构造函数调用基[超]类的一个构造函数。派生类的每个析构函数都在基类[超]类的析构函数之前调用。
不,它们是继承的。例如,析构函数总是被继承并以与创建相反的顺序调用。例如,如果我们有foo
, bar
和xyzzy
类:
class foo { ... };
class bar : public foo { ... };
class xyzzy : public bar { ... };
如果你销毁一个xyzzy
类的对象,析构函数将按以下顺序被调用:~xyzzy()
, ~bar()
,最后是~foo()
。
构造函数也总是继承的,但不能直接调用。必须在构造函数初始化列表中使用它们,否则将调用默认构造函数(默认构造函数是不接受参数的构造函数)。例如,假设我们有以下类:
class foo {
public:
foo();
foo (int _value);
}
class bar : public foo {
int m_value;
public:
bar (int _value);
}
bar::bar (int _value)
{
m_value = _value;
}
在这种情况下,当您创建类bar
的对象时,调用foo
的构造函数,但它是默认构造函数(foo()
)。接受参数foo (int _value)
的构造函数永远不会被调用。但是如果我们把bar (int _value)
构造函数的定义改成这样:
bar::bar (int _value)
: foo (256 - _value), m_value (_value)
{
}
然后调用foo (int _value)
而不是默认构造函数
正如这个问题所解释的,构造函数不能被继承。
相关文章:
- C++ std::vector 中的虚拟析构函数继承
- 继承的类析构函数
- 抽象类析构函数与继承"Shutdown"函数
- C++虚拟继承、虚拟析构函数和 dynamic_cast<void*>
- 如果不手动完成,子类是否继承父类的析构函数?
- 从 std::streambif 继承时不兼容析构函数编译器警告
- 多重继承析构函数调用他自己和父析构函数?c++
- 为什么我在使用组合而不是继承时得到 C4624(无法访问基类析构函数)
- 抽象基类中的析构函数保护不会在 C++ 中继承
- C++继承和构造函数、析构函数
- 从 STL 容器继承并删除"新"运算符以防止由于缺少虚拟析构函数而导致未定义的行为是否有意义?
- 虚拟继承中的析构函数
- 复制、移动、交换、赋值和析构函数的C++继承?我需要哪个
- 在不使用虚拟析构函数的情况下删除继承的对象时中止
- 在 4 级继承链中C++虚拟析构函数
- C++ 无虚拟析构函数的继承
- C++析构函数继承
- 从没有虚拟析构函数的类继承
- C++非抽象析构函数继承
- C++继承:缺少虚拟析构函数会导致内存泄漏