C ++分配给对象变量?

时间:2014-11-28 01:35:04

标签: c++ object syntax

我正在学习来自java背景的c ++,据我所知,在Java中,一切都是隐含的指针(原始类型除外),所以当我想使用一个在已经分配之间跳转的变量时,我一直在使用指针类的实例。 我想知道的是当你做这样的事情时会发生什么:

class Thing1{
public:
    Thing1() {n = 10;}
    int n;
}

Thing1 A; // Creates an instance of Thing1
Thing1 B = A; // What happens here???
B.n = 5;
A.n = 16;

所以在堆栈上创建了两个Thing1对象吗?我混淆了将包含类实例的变量赋值给该类的另一个实例的行为(假设我们不重载=运算符)。有什么帮助吗?

2 个答案:

答案 0 :(得分:0)

首先,你的代码非常错误:

 Thing1() = {n = 10};

应该是:

 Thing1() {n = 10;} // notice deleted = and semicolon position

你需要用分号结束课程定义。

现在,回答你的问题:如果你在相同的类对象之间使用=运算符而没有重载,你只需将B的所有成员变量基本上设置为A的值,这两个目标仍然是相互独立的。


就像:

int a = 5, b = 10;
b = a; // b = 10 and a = 10
b = 3 // b = 3 and a = 10

考虑这段代码:

#include <iostream>
using namespace std;

class Thing1
{
    public:
        Thing1() {n = 10;}
        int n;
};


int main() 
{
    Thing1 A; // Creates an instance of Thing1
    Thing1 B = A; // What happens here???

    cout << B.n << endl << A.n << endl; // 10 10

    B.n = 5;
    A.n = 16;

    cout << B.n << endl << A.n; // 5 16

    return 0;
}

打印出来:

  

10
  10个
  5
  16个

答案 1 :(得分:0)

该行的含义: 事1 B = A; //这里发生了什么???

B是Thing1类型的对象,对象B的成员使用对象A的成员的当前值进行初始化。您不是将对象A的指针指定给对象B,而只是将A的另一个副本指定为A.是在C ++中使用复制构造函数完成的。

更改B的任何成员不会反映在A类的相应成员中。