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