15

假设我有一个基类:

class baseClass  
{  
  public:  
baseClass() { };

};

和一个派生类:

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

    };

当我创建的 derClass构造函数的实例baseClass被调用。我怎样才能防止这种情况?

4

3 回答 3

20

制作一个额外的空构造函数。

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) { };

};
于 2010-10-31T21:18:58.360 回答
8

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

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

于 2010-10-31T21:14:04.210 回答
1

示例工作程序

#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;
}

输出

a                                                                                                        
----------                                                                                               
b   
于 2020-06-27T21:09:27.840 回答