将基类构造函数强制转换为派生类构造函数是什么意思?
what is the meaning in casting base class constructor to derived class constructor?
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){}
如果Derived
类继承了Base
类,那么在构造Derived
对象时,Derived
类的构造函数必须调用Base
类的构造函数。这些类的Destructor
将以相反的顺序调用。在Triangle(int a=0, int b=0):Shape(a,b){}
中,Triangle
构造函数调用Shape
构造函数并传递所需的参数。不涉及选角。检查这个和这个
这里没有强制转换。Triangle
构造函数用参数列表(a,b)
调用Shape
基类的构造函数。
这里没有强制转换。这是一个构造函数初始化列表。
当你构造Triangle
时,由于Shape
是一个基类,它必须先构造Shape
。列表Shape(a,b)
说明a,b
是给这个Shape
的构造函数的参数。
代码:
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)用一个新的空构造函数声明一个新类。一些开发人员这样做,是为了稍后向构造函数中添加代码,或者显式地添加一个空构造函数,作为"最佳实践",表明应该有一个构造函数。
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()
{
// ...
}
};
每种情况都取决于你想要达到的目标。根据编码风格的不同,这些情况中的一些可能被认为是"坏实践",另一些则是"好实践"。
欢呼。
相关文章:
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 这里的字符串函数是什么意思
- 调用'Node'构造函数是不明确的
- 这个函数是什么意思(我的英语sry)
- C++ 中的 use 函数是什么?
- C++中的编译时函数是什么?
- 使用 DnsQuery 或 getaddrinfo 的正确函数是什么?
- 复制和移动构造函数是自动好友吗?
- 这个构造函数是做什么的
- Lua 中看起来像表的函数是什么?
- 子类的构造函数后跟冒号后的基类构造函数是什么意思?
- 初始化对象后,用隐式转换而不是赋值运算符调用构造函数有什么意义
- 具有多个非可选参数的转换构造函数是什么样子的?为什么它有意义
- 默认值的参数化构造函数是什么意思
- 你能用英语尽可能简单地解释一下什么是复制构造函数,什么时候需要使用它吗?
- 我的复制构造函数是错误的.它们应该是什么样子?
- 将基类构造函数强制转换为派生类构造函数是什么意思?
- 错误到底是什么,对于错误地调用可移动和不可复制成员的复制构造函数有什么解决方法
- Tensorflow - ops 构造函数是什么意思