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

问题描述 投票:1回答:2

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

c++ class static
2个回答
2
投票

我有一个程序使用静态将构造函数对象强制转换为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

来自参数Aa(在此为int)。

0
投票
char c1 = static_cast(Hazem),您正在将类型为int 66的char强制转换为char,ASCII中的字符为字母'B'。

Hazem = static_cast(a),在进行此分配时,您将被称为值为30的构造函数,因此您将打印成员变量x的值


0
投票
char c1 = static_cast(Hazem),您正在将类型为int 66的char强制转换为char,ASCII中的字符为字母'B'。

Hazem = static_cast(a),在进行此分配时,您将被称为值为30的构造函数,因此您将打印成员变量x的值

© www.soinside.com 2019 - 2024. All rights reserved.