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

时间:2014-05-07 03:22:23

标签: c++ oop polymorphism base-class derived

class Triangle: public Shape{
      public:
             Triangle(int a=0, int b=0):Shape(a,b){}
             int area()
             {
                 cout << "in triangle class";
                 return width*height/2;
             }
};

在上面的代码中,wt是行

的含义
Triangle(int a=0, int b=0):Shape(a,b){}

4 个答案:

答案 0 :(得分:1)

如果Derived类继承Base类,那么在构造Derived对象时,Derived类的构造函数必须调用Base类的构造函数。这些类的Destructor将以相反的顺序调用。在Triangle(int a=0, int b=0):Shape(a,b){}中,Triangle构造函数调用Shape构造函数传递所需的参数。没有涉及铸造。查看thisthis

答案 1 :(得分:0)

这里什么都没有。 Triangle构造函数正在调用Shape基类&#39;带参数列表的构造函数(a,b)

答案 2 :(得分:0)

这里没有演员。这是一个构造函数初始化列表。

构造Triangle时,由于Shape是基类,因此必须首先构造Shape。列表Shape(a,b)表示a,b是赋予此Shape的构造函数的参数。

答案 3 :(得分:0)

您的代码:

class Triangle: public Shape{
      public:
             Triangle(int a=0, int b=0):Shape(a,b)
             {
               // may do something
             }

             int area()
             {
                 cout << "in triangle class";
                 return width*height/2;
             }
};

内部如何运作:

class Triangle: public Shape{
          public:
                     Triangle(int a=0, int b=0):
                 {
                   // always before the others instructions
                   base(a,b);

                   // may do something
                 }

                 int area()
                 {
                     cout << "in triangle class";
                     return width*height/2;
                 }
    };

有几种方法可以使用构造函数:

(1)使用新的构造函数

声明一个新类
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()
    {
      // ...
    }
};

(2)使用new和empty构造函数声明一个新类。一些开发人员按顺序将这些代码添加到构造函数中,或者,显式地添加一个空构造函数,作为&#34;最佳实践&#34;,以指示应该有一个构造函数。

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

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

(3)声明一个没有新构造函数的新类。编译器添加了一个不执行任何操作的自动构造函数。

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

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

(4)使用新的构造函数声明一个新类,该构造函数调用基础构造函数。喜欢你的情景:

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

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

每个案例取决于您想要达到的目标。在某些情况下,可能会考虑&#34;不良做法&#34;,其他&#34;良好做法&#34;,具体取决于编码风格。

干杯。