[英]Getter return null C++
我有class car
并且我使用 car 作为class App
的属性。
class Car{
private:
string color;
public:
//setter getter
void setColor(string c){
color = c;
}
string getColor(){
return color;
}
}
和
class App(){
private:
Car car;
public:
App():car(){
}
Car getCar(){
return car;
}
}
这是我的主要应用程序
int main(){
App app[2];
app[0].getCar().setColor("red")
//WHY RETURN NULL?
cout << app[0]/getCar().getColor();
return 0;
}
setter 运行良好,但为什么 getter 返回 null,就好像对象app[0]
是 reinstance 一样? 谢谢你
setter 运行良好,但是,为什么 getter 像对象 (app[0]) 是 reinstance 一样返回 null?
您遇到了问题,因为您返回的是Car
成员变量的临时副本,而不是对成员变量本身的引用。 更具体地说,您的成员函数getCar()
返回Car
而不是Car&
。 您当前的版本会将成员变量car
的值复制到临时变量中,并将临时变量作为其返回值返回,而不是成员变量本身。 那么在这段代码中:
app[0].getCar().setColor("red");
您实际上是在修改getCar()
返回的临时副本的内容。 由于这是一个临时副本,临时副本将在语句结束时销毁,您的所有修改都将丢失。 此外, app[0]
的car
成员变量将继续具有其默认值。
您想要的是返回对成员变量本身的引用,这将允许您直接编辑其内容。 为此,您需要按以下方式修改您的App
类:
class App(){
private:
Car car;
public:
App():car(){
}
Car& getCar(){
return car;
}
}
现在getCar()
返回对成员变量car
引用,修改此引用将直接修改app[0]
的car
成员变量,从而为您提供预期的行为。
在这种特定情况下,返回引用可以解决您的问题。
但是,一般来说,成员变量的返回引用是一种不好的做法。( 请参阅这篇文章中的详细信息)。
在您的情况下,我认为您在获得汽车时想要共享所有权。 所以可能对汽车使用 shared_ptr 比直接返回引用更好。
class App
{
public:
App() : car(std::make_shared<Car>()){};
std::shared_ptr<Car> getCar() {return car;}
private:
std::shared_ptr<Car> car;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.