读书笔记_Effective_C++_条款二十二:将成员变量声明为private

1.格式统一

在调用的时候,不会去想有没有(),一律是有get(),或者set()之类的、

2.封装

能直接访问得越少,表明封装性越高,

封装性越高,我们的顾虑就少了,

      例如:我们a.data*0.9的时候,不需要调用出来*0.9.只需用public的get()来调用在修改一下就好了

为什么不使用protected

在没有继承下的class下protected和private是一样的

但在发生了继承的情况下,原来只能用父类函数调用的数据,因为protected,完全暴露了出来。

而且,用了private和public的类会很僵化,你几乎很难修改他。

所以书上说,数据只有两种:封装的和不封装的

时间: 2024-10-12 16:07:36

读书笔记_Effective_C++_条款二十二:将成员变量声明为private的相关文章

读书笔记_Effective_C++_条款二十五: 考虑写出一个不抛出异常的swap函数

在之前的理论上调用对象的operator=是这样做的 void swap(A& x) { std::swap(a, x.a); } A& operator=(const A& a) { A temp = a; swap(temp); return *this; } 上面的代码看起来有点麻烦,但它是一个好办法. 我们可以在std里面特化我们的swap class A { private: int a; public: void swap(A& x)//防止写成friend,我

读书笔记_Effective_C++_条款二十四: 若所有参数皆需类型转换,请为此采用non-member函数

class A { private: int a; public: A(int x) :a(x){} A operator*(const A& x) { return A(a*x.a); } }; int main() { A a(2); A b = a*a;//没有问题 A b = a * 2;//由于构造函数没有explicit,这里隐式转换了,也没有问题 A b = 2 * a;//出问题了 } 老师讲过,一种是类的member函数,一种是non-member函数, 但我们为了封装性,尽量

读书笔记_Effective_C++_条款二十一:当必须返回对象时,别妄想返回其reference

在栈空间的临时成员变量在函数生命期结束后无法传出 friend A& operator*(const A& a, const A& b) { A temp; temp.data = a.data*b.data;//a,b的成员变量相乘 return temp; } 既然栈空间不行,试试堆空间 friend A& operator*(const A& a, const A& b) { A *temp=new A; temp.data = a.data*b.da

读书笔记_Effective_C++_条款二十三:宁以non-member、non-friend替换member函数

有下面一种情况 class A { private: int a; int b; public: A(int x, int y) :a(x), b(y){} void a_display(){ cout << a << endl; } void b_display(){ cout << b << endl; } }; 你想输出全部的时候 member函数情况 void display(){cout<<a<<b<<endl;

读书笔记_Effective_C++_条款十五:在资源类管理类中提供对原始资源的访问

void f(int* a) { cout <<* a << endl; } int main() { shared_ptr<int> p(new int(3)); f(p.get());//shared_ptr<int> 是无法隐式转换成int* ,但用.get()就可以把她转换回原始指针 }

读书笔记_Effective_C++_条款十七:以独立语句将new产生的对象置入智能指针

int get_int(); void f(shared_ptr<int> a, int); //下面调用 f(new int(3), get_int());//如果是类而不是int就可以会有有explicit,就不能隐式转换 f(shared_ptr<int> a = new int(3), get_int());//还有显式转换 //然而都不是好方法 //从小老师就教导我们不同的编译器,调用参数顺序是不一样的 //在调用内存时,不要烦多写几句 //*****以独立语句将new产

Effective C++:条款22:将成员变量声明为private

(一)为什么不采用public成员变量 (1)首先,从语法一致性考虑,客户唯一能访问对象的方法就是通过成员函数,客户不必考虑是否该记住使用小括号(). (2)其次,使用函数可以让我们对成员变量的处理有更精确的控制.如果我们令成员变量为public,那么每个人都可以读写它! 但如果我们以函数取得或设定其值,我们就可以实现出"不准访问"."只读访问"以及"读写访问",我们甚至可以实现"惟写访问". class AccessLeve

R in action读书笔记(16)第十二章 重抽样与自助法之 置换检验

第十二章:重抽样与自助法 本章,我们将探究两种应用广泛的依据随机化思想的统计方法:置换检验和自助法 12.1 置换检验 置换检验,也称随机化检验或重随机化检验. 有两种处理条件的实验,十个受试者已经被随机分配到其中一种条件(A或B)中,相应的结果变量(score)也已经被记录.实验结果如下: 如果两种处理方式真的等价,那么分配给观测得分的标签(A处理或B处理)便是任意的.为检验两种处理方式的差异,我们可遵循如下步骤: (1) 与参数方法类似,计算观测数据的t统计量,称为t0: (2) 将10个得

R in action读书笔记(17)第十二章 重抽样与自助法

12.4 置换检验点评 除coin和lmPerm包外,R还提供了其他可做置换检验的包.perm包能实现coin包中的部分功能,因此可作为coin包所得结果的验证.corrperm包提供了有重复测量的相关性的置换检验. logregperm包提供了Logistic回归的置换检验.另外一个非常重要的包是glmperm,它涵盖了广义线性模型的置换检验依靠基础的抽样分布理论知识,置换检验提供了另外一个十分强大的可选检验思路.对于上面描述的每一种置换检验,我们完全可以在做统计假设检验时不理会正态分布.t分