目前做哪些网站能致富,单位网站建设意见,沈阳品牌设计,阳谷网站建设价格封装的好处当然是非常多的。就不一一例举了。但封装也制造了访问壁垒。如果你是初学者#xff0c;当你面对一堆封装好的C类一筹莫展#xff0c;不知道从哪里下手时…
可以试试这个方法#xff0c;数据和代码分离。
就是说#xff0c;class只写方法#xff0c;数据都放到…封装的好处当然是非常多的。就不一一例举了。但封装也制造了访问壁垒。如果你是初学者当你面对一堆封装好的C类一筹莫展不知道从哪里下手时…
可以试试这个方法数据和代码分离。
就是说class只写方法数据都放到对应的struct里面。class都从对应的struct私有继承自己的数据成员。也就是这样
struct A_s {int x[10];virtual void print()0;
};class A :A_s {
public:void print(){ printf(hello world\n);}int getx(int i) { return x[i]; }
};struct B_s {int b;
};class B :public A, B_s {
public:void print(){ printf(hello universe\n);}int getb() {return b;}
};struct A_sstruct B_s 似乎只是多此一举。但是在开发阶段成员方法还不完全具备过于讲究封装必定会碍手碍脚反而使debug不能充分施展。从而在代码留下各种隐患。
这样变化后class正常使用不受影响如果要访问私有数据也轻而易举。因为class在代码完全不生成隐藏的数据成员访问内部数据只需一个class到对应的struct的强制类型转换。
int main()
{struct data : A_s, B_s{};A_s *p;data *q;B b;A *ap;int i;p (A_s*)(apb);for(i0; i10; i) {p-x[i]i1;}q (data*)b;q-b100;b.print();for(i0; i10; i) {printf(%d , b.getx(i));}printf(%d.\n, b.getb());return 0;
}一个很简单的动作。类型系统苦心设计的封装机制被一把击穿了。这就要准备挨骂了。所以你学了之后要悄悄的用千万别说这是我教的。