挑灯葥荇 2023-02-14 14:34 采纳率: 100%
浏览 51
已结题

c++构造函数,对象再赋值

为什么已经定义的对象还可以再次定义呢?A a1(7.0, 3.0);之后再次对a1 = A(7.2, 3.0);定义,仍然可以。
a1 = A(7.2, 3.0);这里为什么还会调用一次构造函数,和析构函数


#include <iostream>
using namespace std;
class  A {
    float   x, y;
public:
    A() { x = 0;  y = 0;  cout << "调用无参数的构造函数\n"; }
    A(float  a) { x = a;  y = 0;  cout << "调用一个参数的构造函数\n"; }
    A(float a, float b) { x = a; y = b; cout << "调用两个参数的构造函数\n"; }
    A(A& a) { x = a.x; y = a.y; cout << "调用拷贝构造函数\n"; }
    ~A() { cout << "调用析构函数" << endl; }
    void Print(void) { cout << x << '\t' << y << endl; }
};

void main(void)
{
    A  a1(7.0, 3.0);
    a1.Print();
    a1 = A(7.2, 3.0);
    a1.Print();
    a1 = A(8);
    a1.Print();
    A  a2(a1);
}

运行结果:

img

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2023-02-14 14:49
    关注

    A a1(7.0, 3.0)----这是新定义变量a1
    a1 = A(7.2, 3.0); ---这是修改变量a1,指向新创建的A对象,这里不是a1的定义啊
    类比一下:
    int a = 10;
    a = 20; //相当于这一行,不是重新定义a,而是给a赋予一个新值而已
    =======
    a1 = A(7.2,3.0)中,右侧A(7.2,3.0)会调用构造函数,产生一个隐式A类型变量,然后将这个变量值赋值给a1,这个隐式A类型变量最后也会析构释放

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月22日
  • 已采纳回答 2月14日
  • 创建了问题 2月14日

悬赏问题

  • ¥15 2024-五一综合模拟赛
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭