使用new关键字创建对象:
#include <iostream>
#include <string>
using namespace std;
class Person {
private:
string name;
public:
Person(string name) {
setName(name);
}
string getName() {
return this->name;
}
void setName(string name) {
this->name = name;
}
};
int main() {
Person *person1 = new Person("Rajat");
Person *person2 = person1;
person2->setName("Karan");
cout << person1->getName() << endl;
cout << person2->getName() << endl;
return 0;
}
输出:
Karan
Karan
创建一个不使用new关键字的对象:
#include <iostream>
#include <string>
using namespace std;
class Person {
private:
string name;
public:
Person(string name) {
setName(name);
}
string getName() {
return this->name;
}
void setName(string name) {
this->name = name;
}
};
int main() {
Person person1("Rajat");
Person person2 = person1;
person2.setName("Karan");
cout << person1.getName() << endl;
cout << person2.getName() << endl;
return 0;
}
输出:
Rajat
Karan
在 Person person2 = person1
中,我原本以为 person2
指向了同一个 person1
,所以预期输出结果为 'Karan Karan'。但实际情况并非如此。
有人能够解释一下 Person person2 = person1
这行代码背后的含义吗?它是否创建了一个全新的对象?
Person person2 = person1;
会拷贝一个人的对象。绝对不是person1和person2指向同一个对象。它们是独立的(但相等的)对象。我发现许多初学者认为相反的情况很令人惊讶。我想不出任何依据这种假设的基础,除了可能是对其他语言的经验。 - john