封装混乱
Encapsulation confusion
我不知道如何正确封装对象。
例:
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 个双精度值怎么办?那么我应该使用第二种方法吗?还是声明结构指针,动态分配内存并使用第三种方法?
我假设你想要的是这个:
某个类,A,包装另一个类,汽车。应该可以访问 A 的 Car 元素,但是,您不能公开 Car 元素,因为如果有人应该更改该元素(如果没有,那么只需将其公开),包装器类可能会不一致。
如果是这样,请使用常量引用:
const Car& getConstCarReference() const { return myCar; }
然后这被称为
const Car& car = instanceOfA.getConstCarReference();
之后,您可以在汽车上使用任何持续呼叫。
顺便说一下,在大多数情况下,返回指针是一个坏主意。从本质上讲,每当您想到返回指针时,您应该能够清楚地论证为什么返回指针是最佳解决方案。
也就是说,我建议放弃像"get"和"set"这样的方法名称。使代码看起来更像发条,而不是处理有机类。我建议你将该方法简单地命名为 car,如const Car& car() const { return m_car; }
所示,匈牙利表示法的成员变量如您所见(使用匈牙利表示法并不重要,但我建议清楚地标记成员变量,至少如果类不是很小。为成员使用诸如_car
或car_
之类的东西也很好用。
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 如何克服提升精神AST混乱
- 将可变参数函数的参数封装在类实例中
- 如何封装一个函数,以便它只能由同一类中的一个其他函数调用?
- 封装C++模板
- 将 RTOS 队列对象封装在仅具有静态分配的 IQueue 自定义接口中
- 从封装在对象中的函数 C++ 返回时为空的列表
- 当要访问的对象被多次封装时,如何正确使用setter
- 在为嵌套类定义行外友元时,我真的必须打破封装吗?
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 如何在类中封装C/C++套接字发送和接收函数?
- std::result_of语法混乱
- 使用具有默认参数的函数模板进行 decltype 会使结果混乱(一个有趣的问题或 gcc 的错误)
- 如何使用吸气剂方法实现C++封装
- C++中多线程的混乱
- Arduino LCD 显示屏显示混乱的字母
- 封装 std::map 以允许迭代,但没有直接密钥访问?
- 类C++友元函数无法访问封装的类
- 在MSDOS编译器上,用大于最大值的值初始化int时输出混乱
- 封装混乱