最近,在用一些零碎时间,看Ruminations on C++这本书.
觉的应该把自己觉的有价值的东西写下来..其实,之前看c++ primer和Thinking in c++的时候.就想过这种方法.但一直没有实施,导致很多知识都只是在脑中一过,,用的时候,大部分都忘了,还得去翻书,
希望这种方法能让自己记忆的更深一点,,将来即使忘了,也可以很方便的回过头来复习一下下..
希望这种方法能给我带来理想的效果,看到这篇文章的朋友,同行,也可以用一下..有什么好的方法,也可以一起分享一下....
-----------------------------------------------------------------------------------------------------------------------------------------------------
书上有这么两句话,我觉的说的很有道理:
只为用到的东西付出代价
C++更适合于那些喜欢思考的程序员
当然,并不是说别的语言就不好,我就挺C++,完全没有这个意思,,我觉的做这种比较或是辩论是豪无意义的,每一种语言都有自己的存在价值,和强势,,在你需要的时候用正确的语言.
-----------------------------------------------------------------------------------------------------------------------------------------------------
今天,主要研究了一下设计一个类应该考虑到的问题
第4章 类设计者的核查表
#你的类需要一个构造函数吗?
1>,不,我的类很简单,我的类里定义的是我用到的接口,
2>必须有,我需要构造函数来隐藏类内部的构造方式
#你的数据成员是私有的吗?
1>设计一个类,很有必要把它的数据成员设计成私有的,这是C++非常鼓励的,如果需要访问,要用接口来代替公有成员
#你的类需要一个无参的构造函数吗?
1>当你显示声明了一个拷贝构造函数时,一个无参的构造函数通常是必须的,即使你的类并不需要这种功能,因为类的使用都并不知道.
#是不是每个构造函数初始化所有的数据成员?
1>这通常是必须的(即使有可能不必这样做),也是一个很好的习惯,能让你避免许多,一开始没有考虑到的问题
#类需要析构函数吗?
1>当你的类包含有指针成员变量时,一个构造函数是必须的,你需要在里面对你的动态内存进行回收,当养成这个习惯是,你将不会再为内存泄漏面烦恼,这往往比其实一些语言的垃圾回收机制更加好用.
#类需要一个虚析构函数吗?
1>当你的程序中用到父类的指针去引用子类的对象的时候,(一个好的程序架构中,这种用法是随处可见的)在父类中,这个虚析构函数是不可缺少的.
#你的类需要拷贝构造函数(赋值=操作符)吗?
1> class String {
public:
String();
String(const char *s);
private:
char *data;
};
很明显,类的成员变量是指针类型,而默认的拷贝(赋值)只是浅拷贝(结果就是两个类中的data指向了同一块内存,这是很危险的),而我们这里需要的是深拷贝,这里解决方法有两种,一种是定义一个深拷贝,如果就是不想让类的使用者去复制对象话,可以把拷贝(赋值)定义为私有的.
class String {
public:
String();
String(const char *s);
String(String str){
this.data=new char[sizeof(*str.getData())];
*this.data=*str.getData();
}
char * const getData(){
return data;
}
private:
char *data;
};
#你的类需要定义关系操作符吗?
1>如果你的类用到模板,或是自己定义的数据结构,关系操作符是必须的...
#删除数组时你记住了用 delete[]吗?
1>在删除任何类型的数组时,记得用delete[]...
#类中应该使用const吗?/
1>原则是能加上const的地方都要加上,即使你看上去可能没有任何好处..这加强了你类的安全性的封闭性.是很必要的.
-----------------------------------------------------------------------------------------------------------------------------------------------------
其中,有几条我觉的可以归纳到一起,我就放到一起了...这些都是平时常用,而且容易被忽略的.大部分C++程序漏洞都是这样造成的.如果能做到这些点.我想C++是最安全的..