C ++构造函数推理

时间:2014-08-19 16:27:22

标签: c++

为什么要调用构造函数H1H2?我能说明理由吗?

class A
{
public:
    int a;
    char b;

    A()
    {
        a = 0;
        b = '\n';
    }

    A(int a)
    {
        cout << "H1";
    }

    A(char c)
    {
        cout << "H2";
    }
};

int main()
{
    int a = 10;
    char c = 'h';
    A ob1 = a;
    ob1 = c;
}

2 个答案:

答案 0 :(得分:4)

A ob1 = a;

这会从A值初始化int类型的对象。这使用构造函数A(int),打印H1

ob1 = c;

这会为对象分配char值。由于没有合适的赋值运算符A::operator=(char),它可以直接赋值,它分两个阶段完成:

  • A
  • 创建char类型的临时对象
  • 使用隐式副本赋值运算符将其分配给ob1

第一阶段使用构造函数A(char)初始化临时,打印H2

因此,输出为H1H2

答案 1 :(得分:0)

class A {
  public:
    int a;
    char b;
    A() {
            a=0;
            b='\n'; 
    }
    A(int a) {
           cout<<"H1";
    }
    A(char c) {
           cout<<"H2";
    } 
}; 

int main() {
    int a=10;
    char c='h';
    A ob1=a; // calls A(int a) because a is typeof int
    ob1=c;  // calls A(char c) because c is typeof char
}