我不确定如何正确封装对象。
示例:
struct Car {
int wheels = 0;
int doors = 0;
};
class A{
Car myCar;
public:
// 1st method
Car getCar() const { return myCar; }
void setCar(Car c) { myCar = c; }
// 2nd method
Car &getCarReference() { return myCar; }
// 3rd method
Car *getCarPointer() { return &myCar; }
};
据我所知,第一种方法制作了我的结构的副本,如果结构很小就很好,如例子所示。但是,如果结构包含100 000个双值,该怎么办?我应该使用第二种方法吗?或者声明结构指针,动态分配内存并使用第三种方法?
答案 0 :(得分:1)
我认为你想要的是这个:
有些班级A包装了另一个班级,Car。应该可以访问A的Car元素,但是,您不能公开Car元素,因为如果有人应该更改该元素,那么包装类可能会出现不一致(如果没有,那么只需要它公开)。
如果是这样,请使用const引用:
const Car& getConstCarReference() const { return myCar; }
然后将其称为
const Car& car = instanceOfA.getConstCarReference();
之后,你可以在汽车上使用任何常数调用。
顺便说一句,返回一个指针在大多数情况下是个坏主意。基本上,每当你想到返回指针时,你应该能够清楚地说明为什么返回指针是最好的解决方案。
那就是说,我建议弃用方法名称,如" get"和"设置"。使代码看起来更像发条,而不是处理有机类。我建议你简单地将方法命名为car,如const Car& car() const { return m_car; }
中所示,匈牙利符号中的成员变量如你所见(不重要的是你使用匈牙利符号,但我建议明确标记成员变量,at至少如果课程不是很小的话。对于会员来说,使用_car
或car_
之类的东西也很有效。)