我的问题是,我有一个程序使用静态强制转换构造函数对象到char
类型。这条线是char c1 = static_cast<char>(Hazem)
.这里到底发生了什么?另外,为什么该行Hazem = static_cast<A>(a)
仅通过调用即可具有输出?
谢谢
class A {
int x;
public:
A(int i) {
x = i;
cout << "Conversion constructor" << endl;
cout << x << endl;
}
operator char()
{
cout << "Conversion operator" << endl;
return char(x);
}
};
int main() {
A Hazem(65);
Hazem = 66;
char c1 = static_cast<char>(Hazem);
cout << c1 << endl;
int a = 30;
Hazem = static_cast<A>(a);
return 0;
}
程序输出
Conversion constructor
65
Conversion constructor
66
Conversion operator
B
Conversion constructor
30
我有一个程序,它使用静态强制转换构造函数对象到char类型。
没有"构造函数对象"这样的东西。我想你的意思是......"对象"?
构造函数是一种特殊类型的成员函数。
这条线是
char c1 = static_cast<char>(Hazem)
.这里到底发生了什么?
您要求计算机实现的目标:按照operator char()
中所述的步骤生成char
。这些步骤是:
- 生成控制台输出"转换运算符">
- 将成员变量的值
x
转换为char
另外,为什么线路
Hazem = static_cast<A>(a)
仅通过调用即可获得输出?
因为,再一次,这就是你要求计算机做的。采用int
的构造函数具有以下步骤:
- 将成员
x
的值设置为参数i
- 生成控制台输出"转换构造函数">
-
生成控制台输出
x
...并且static_cast<A>(a)
从参数a
构造一个A
(这里是一个int
(。
char c1 = static_cast(Hazem( 您正在对 ASCII 中是字母"B"的值 int 66 的字符进行强制转换。
Hazem = static_cast(a( 你被称为值为 30 的构造函数,而 做这个赋值,所以你打印成员变量 x 的值