如何设置类的内部结构
how to set internals of a class
嗨,我对C++很
陌生,并且正在将 C 代码转换为 C++。我首先将所有结构转换为类,并为内部添加了访问器和突变器,但有些结构内部还有其他结构。我想知道在类中设置类内部的最佳方法,例如 结构1.结构2.结构3.i = 5;我应该使用访问器作为引用传递吗?但是看到访问器往往是常量,这是我应该做的事情吗?
类似的东西class1.get_class2().get_class3().set_i(5) 或者其他东西,如果它可以以这种格式完成。
这可能是一个愚蠢的问题,但我不知道该怎么做,谢谢
class1.get_class2().get_class3().set_i(5)
如果 get_class2()
是非const
并返回非const
指针引用,则可能。
但是,这种方法完全打破了封装。class1
的用户不应该(也不应该)知道class1
内部使用class2
,而内部又使用class3
。
如果 setter-API 是绝对必要的,那么更好的方法是分层执行。例如
// User
class1.set_i( 5 );
// class1
class1::set_i( int x ) { class2_obj.set_i( x ); }
// class2
class2::set_i( int x ) { class3_obj.set_i( x ); }
// class3
class3::set_i( int x ) { i_ = x; }
我不太确定...您是将类放在类中还是将对象放在类中?
像这样:
class OBJ1
{
//methods , and other stuff
}
class OBJ2
{
public OBJ1 *O ;
}
是有效的,所以你可以访问一个方法,如:
OBJ2 *N2 ;
N2->O->some_method();
然而,类似的东西
class OBJ2
{
class OBJ1;
}
无效:P
再。。。不确定这是否正是您问的...
如果您确实有充分的理由通过 getter 和 setter 访问您的成员对象,您可以执行以下操作:
class A {
public:
void f() const {}
};
class B {
public:
const A &get_a() const {
// the returned reference will be read-only, i.e. only non-const member
// functions can be called, and public members can not be written.
// it needs to be stored in a const A & object.
return a;
}
A &get_writable_a() {
return a;
}
void set_a(A &a) {
//make sure that the assignment operator of A will take care of all the
//dirty internals, such as internal buffers that need to be deleted.
this->a = a;
}
private:
//the member
A a;
};
int main() {
B b;
b.get_a().f();
}
如果您没有充分的理由这样做,我建议您简单地将其设为公共成员,并直接访问它:
class A {
public:
void f() const {}
};
class B {
public:
A a;
};
int main() {
B b;
b.a.f();
}
这不就是更优雅吗?
请注意,您可以使用friend
指定允许直接访问私有成员的其他函数或类。
正如在另一个答案中也指出的那样,在大多数情况下,使成员对象对外部可见是一个坏主意。
相关文章:
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 卷曲bracers内部结构的声明
- 内部结构初始化不起作用 - C++
- 结构内部结构的联合 - 混合 C 和 C++
- 在另一个结构中声明内部结构会导致错误:结构使用无效
- 如何让指针的深层副本将内部结构发送到内核?
- C++类内部结构动态分配的方法
- C 类内部结构和两个呼叫同时
- 使用包含该结构内部结构的 using 定义
- Realloc char* 内部结构
- LLVM,将内部结构的偏移偏移
- 将模板参数传递到内部结构时出错
- 初始化指向另一个结构内部结构的指针
- 如何与CUDA中的结构内部结构一起工作
- C++循环包括内部结构
- 联盟内部结构
- 如何从模板类返回内部结构
- 在矢量上使用调整大小时,矢量内部结构中的unique_ptr不会编译
- 在c++中映射内部结构
- 结构内部结构的Init对