我的问题是,我有一个程序使用静态将构造函数对象强制转换为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)
仅通过被调用就具有输出?
再次,这就是您要求计算机执行的操作。您的[[constructor采取int
的步骤如下:
x
的值设置为参数i
x
static_cast<A>(a)
constructs
来自参数A
的a
(在此为int
)。Hazem = static_cast(a),在进行此分配时,您将被称为值为30的构造函数,因此您将打印成员变量x的值
Hazem = static_cast(a),在进行此分配时,您将被称为值为30的构造函数,因此您将打印成员变量x的值