Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将基类构造函数转换为派生类构造函数的意义是什么?_C++_Oop_Polymorphism_Base Class_Derived - Fatal编程技术网

C++ 将基类构造函数转换为派生类构造函数的意义是什么?

C++ 将基类构造函数转换为派生类构造函数的意义是什么?,c++,oop,polymorphism,base-class,derived,C++,Oop,Polymorphism,Base Class,Derived,这里什么都没有。三角形构造函数正在使用参数列表调用形状基类的构造函数,(a,b)这里没有强制转换。这是一个构造函数初始化列表 构造三角形时,由于形状是基类,因此它必须先构造形状。列表Shape(a,b)说明a,b是为该Shape提供给构造函数的参数,如果派生的类继承了基类,那么在构造派生的对象时,Derived类的构造函数必须调用Base类的构造函数。这些类的析构函数s将按相反顺序调用。在Triangle(inta=0,intb=0):Shape(a,b){}中,Triangle构造函数正在调用

这里什么都没有。
三角形
构造函数正在使用参数列表调用
形状
基类的构造函数,
(a,b)

这里没有强制转换。这是一个构造函数初始化列表


构造
三角形
时,由于
形状
是基类,因此它必须先构造
形状
。列表
Shape(a,b)
说明
a,b
是为该
Shape

提供给构造函数的参数,如果
派生的
类继承了
类,那么在构造
派生的
对象时,
Derived
类的构造函数必须调用
Base
类的构造函数。这些类的析构函数s将按相反顺序调用。在
Triangle(inta=0,intb=0):Shape(a,b){}
中,
Triangle
构造函数正在调用
Shape
构造函数,传递所需的参数。没有涉及铸造。检查并确认。

您的代码:

Triangle(int a=0, int b=0):Shape(a,b){}
(2) 使用新的空构造函数声明一个新类。有些开发人员这样做是为了在以后向构造函数中添加代码,或者明确地添加一个空构造函数,作为“最佳实践”,以指示应该有一个构造函数

class NewConstructorClass: public SomeBaseClass // dont care about parent class constructor
{
   NewConstructorClass {
     // do something new instruction 1
     // do something new instruction 2
     // do something new instruction 3
   }

  public:
    void DoAnything()
    {
      // ...
    }
};
(3) 声明一个没有新构造函数的新类。编译器添加了一个不执行任何操作的自动构造函数

class NewConstructorClass: public SomeBaseClass // dont care about parent class constructor
{
   NewConstructorClass {
     // does nothing, on purpouse
   }

  public:
    void DoAnything()
    {
      // ...
    }
};
(4) 使用调用基构造函数的新构造函数声明一个新类。与您的场景类似:

class NewConstructorClass: public SomeBaseClass // dont care about parent class constructor
{
   NewConstructorClass {
     // do something new
   }

  public:
    void DoAnything()
    {
      // ...
    }
};
每种情况都取决于你想要达到的目标。有些情况下,可以考虑“坏习惯”,其他的“好做法”,取决于编码风格。


干杯。

我肯定这是重复的东西,但你不能在finder中搜索“:)+1(-1+1->0),因为你问了一个别人可能认为愚蠢或重复的问题,但值得回答
class NewConstructorClass: public SomeBaseClass // dont care about parent class constructor
{
   NewConstructorClass {
     // do something new instruction 1
     // do something new instruction 2
     // do something new instruction 3
   }

  public:
    void DoAnything()
    {
      // ...
    }
};
class NewConstructorClass: public SomeBaseClass // dont care about parent class constructor
{
   NewConstructorClass {
     // does nothing, on purpouse
   }

  public:
    void DoAnything()
    {
      // ...
    }
};
class NewConstructorClass: public SomeBaseClass // dont care about parent class constructor
{
   NewConstructorClass {
     // do something new
   }

  public:
    void DoAnything()
    {
      // ...
    }
};
class NewConstructorClass: public SomeBaseClass // dont care about parent class constructor
{
   NewConstructorClass: base() {
     // do something new
   }

  public:
    void DoAnything()
    {
      // ...
    }
};