了解类构造函数的静态强制转换



我的问题是,我有一个程序使用静态强制转换构造函数对象到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 的值

最新更新