尝试将对象分配给C ++中不同类型的对象

奥鲁崎

我试图了解这段代码的行为:

class A {
public:
    int a;
    A(int x = 0): a(x) {cout << "A-ctor" << endl;}
    ~A() {cout << "A-dtor" << endl;}
};

class B {
public:
    int b;
    B(int x = 0): b(x) {cout << "B-ctor" << endl;}
    ~B() {cout << "B-dtor" << endl;}
};

int main() {
    A a;
    B b;
    a = b.b;
    return 0;
}

该程序的输出为:

A-ctor
B-ctor
A-ctor
A-dtor
B-dtor
A-dtor

我的问题是,在这一行中main()a = b.b,创建一个类的实例,并立即销毁。为什么会这样呢?此外,尝试将一个类的对象分配给另一个类时,是否应该不会出现编译错误?

maximum_prime_is_463035818

这项作业

a = b.b;

工作的,因为有从定义(隐含的)转换一个用户intA从这个构造:

A(int x = 0): a(x) {cout << "A-ctor" << endl;}

这样的构造函数称为转换构造函数(可以使用单个参数调用,而无需声明explicit)。如果要防止隐式转换,请将其声明为exlicit

输出来自

A a;            // A-ctor
B b;            // B-ctor
a = b.b;        // A-ctor

请注意,最后一行实际上会调用生成的编译器A::operator=(const A&),因为您没有声明A::operator=(int)A通过上述构造函数创建一个临时文件

...然后按通常的相反顺序构造解扰器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章