不理解一些C ++语法

时间:2017-01-10 14:03:39

标签: c++ syntax

Helo,我是C ++编程的新手。 我不了解这些代码行......

SomeClass someClassObject(35);
...
someClassObject = SomeClass(46);

首先,“someClassObject = SomeClass(46)”有什么作用?它是不是SomeClass E.G的指针:“someClassObject = new SomeClass(46)”但是在堆栈上呢?

3 个答案:

答案 0 :(得分:2)

此处不涉及指针。 SomeClass(46)构造一个临时对象,通常在堆栈上。接下来是对变量someClassObject的赋值。可以通过重载赋值运算符来用户定义此赋值的确切语义。

PS:请注意语句末尾缺少的分号。

答案 1 :(得分:1)

SomeClass(46)通过调用将数字SomeClass传递给它的构造函数,在堆栈上构造46的新实例。

someClassObject = SomeClass的某个实例呼叫operator=上的someClassObject

除非构造函数声明为显式,否则它也可以写为:

someClassObject = 46;

请看一下这个例子:http://ideone.com/7kgWob粘贴在下面:

#include <iostream>
using namespace std;

class SomeClass
{
private:
    int i = 0;

public:
    SomeClass() { cout << "default constructor\n"; };
    SomeClass(int val) { i = val; cout << "constructor getting int: " << val << '\n'; };
    ~SomeClass() { cout << "destrucing object having i: " << i << '\n'; };

    SomeClass& operator=(const SomeClass& rhs) { 
        cout << "operator= getting int: " << rhs.i << '\n';
        if (this != &rhs) {
            i = rhs.i;
        }
        return *this;
    }
};

int main() {
    SomeClass a(10);
    SomeClass b = SomeClass(20);
    SomeClass c(35);
    c = SomeClass(46);
    return 0;
}

将输出:

constructor getting int: 10
constructor getting int: 20
constructor getting int: 35
constructor getting int: 46
operator= getting int: 46
destrucing object having i: 46
destrucing object having i: 46
destrucing object having i: 20
destrucing object having i: 10

本质上,它创建一个临时实例,并将当前实例设置为与临时实例相同的值(此时存在两个具有相同值的对象)。然后它释放临时。由于不涉及new,因此它发生在堆栈上。

答案 2 :(得分:0)

SomeClass* someClassObject = new SomeClass(46);通过调用带整数的构造函数,将class SomeClass类型的指针初始化为动态对象。

第二个你调用重载赋值运算符,它调用构造函数,该构造函数接受一个创建临时对象的整数,然后将它分配给someClassObject。

不要忘记;它不是任意的。