不从派生类调用基类构造函数

时间:2010-10-31 21:03:50

标签: c++ class derived-class

说我有一个基类:

class baseClass  
{  
  public:  
baseClass() { };

};

派生类:

class derClass : public baseClass
    {  
      public:  
    derClass() { };

    };

当我创建derClass的实例时,会调用baseClass的构造函数。我该如何防止这种情况?

3 个答案:

答案 0 :(得分:15)

制作额外的空ctor。

struct noprapere_tag {};

class baseClass  
{  
public:  
  baseClass() : x (5), y(6) { };

  baseClass(noprapere_tag) { }; // nothing to do

protected:
  int x;
  int y;

};

class derClass : public baseClass
{  
public:  
    derClass() : baseClass (noprapere_tag) { };

};

答案 1 :(得分:4)

基类实例是任何派生类实例的组成部分。如果成功构造派生类实例,则必须 - 按定义 - 构造所有基类和成员对象,否则派生对象的构造将失败。构造基类实例涉及调用其构造函数之一。

这是继承在C ++中如何工作的基础。

答案 2 :(得分:1)

示例工作程序

class Foo:
    blah: int
    def __init__(self):
        self.blah = 'asdf'

输出

#include <iostream>

using namespace std;
class A
{
    public:
    A()
    {
        cout<<"a\n";
    }
    A(int a)
    {}
};
class B:public A
{
    public:
    B() : A(10)
    {
        cout<<"b\n";
    }
   
};
int main()
{
    
    new A;
    cout<<"----------\n";
    new B;
    
    return 0;
}