【问题标题】:Understanding static cast for constructors of classes了解类构造函数的静态转换
【发布时间】:2019-12-09 15:33:50
【问题描述】:

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

【问题讨论】:

  • 空格对编译器来说可能无关紧要,但对人类来说却很重要。共享代码时,请确保其格式尽可能易于阅读。
  • 你知道static_cast 是什么,它有什么作用吗?
  • 您知道A 类的operator char() 成员做什么以及何时调用它吗?

标签: c++ class static


【解决方案1】:

我有一个程序,它使用静态将构造函数对象转换为 char 类型。

没有“构造器对象”这样的东西。我想你的意思是……“对象”?

构造函数是一种特殊类型的成员函数。

线路是char c1 = static_cast&lt;char&gt;(Hazem)。这里到底发生了什么?

您要求计算机完成的操作:按照operator char() 中描述的步骤生成char。这些步骤是:

  • 生成控制台输出“转换运算符”
  • 将成员变量x的值返回为char

还有为什么Hazem = static_cast&lt;A&gt;(a)这行仅仅被调用就有输出?

因为,这就是您要求计算机执行的操作。您的构造函数采用int 具有以下步骤:

  • 将成员x的值设置为参数i
  • 生成控制台输出“Conversion constructor”
  • 产生控制台输出x

...和static_cast&lt;A&gt;(a) 构造来自参数a(这里是int)的A

【讨论】:

    【解决方案2】:

    char c1 = static_cast(Hazem) 您正在将值 int 66 的 char 转换为 ASCII 中的字母 'B' 。

    Hazem = static_cast(a) 你被称为构造函数,值为 30,同时执行这个赋值,所以你打印成员变量 x 的值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-07
      • 2018-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      相关资源
      最近更新 更多