挑灯葥荇 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日

悬赏问题

  • ¥30 自适应 LMS 算法实现 FIR 最佳维纳滤波器matlab方案
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像