C++ 封装混乱
我不知道如何正确封装对象 例如:C++ 封装混乱,c++,C++,我不知道如何正确封装对象 例如: 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() { retu
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; }
};
据我所知,第一种方法复制了我的结构,如果结构像示例中所示的那样小,这是很好的。但是,如果结构包含100000个双值呢。那么我应该使用第二种方法吗?或者声明结构指针,动态分配内存并使用第三种方法?我假设您想要的是: 某一类,A,包裹另一类,汽车。应该可以访问的Car元素,但是,您不能将Car元素公开,因为如果有人随后更改该元素(如果没有,则只需将其公开),那么包装器类可能会不一致 如果是,请使用常量引用:
const Car& getConstCarReference() const { return myCar; }
这就叫做like
const Car& car = instanceOfA.getConstCarReference();
在那之后,你可以随时拜访汽车
顺便说一下,在大多数情况下,返回指针是个坏主意。本质上,每当您想到返回指针时,您都应该能够清楚地说明为什么返回指针是最好的解决方案
也就是说,我建议不要使用“get”和“set”等方法名。使代码看起来更像时钟,而不是处理有机类。我建议您将该方法简单地命名为car,如
const car&car()const{return m_car;}
所示,它是匈牙利符号中的成员变量(使用匈牙利符号并不重要,但我建议清楚地标记成员变量,至少在类不是很小的情况下。为成员使用类似于\u car
或car
的方法也很有效。)阅读和。不要对优化进行微观管理,也不要过早地进行优化。始终编写好的、可维护的、可读的和可工作的代码。如果性能“不够好”您可以测量、分析和基准测试以发现瓶颈并对其进行优化。问题的标题有点误导。问题似乎是关于值类型的语义与引用类型的语义,这与封装无关。请阅读关于const
reference的内容。这应该会有所帮助。