分类: C/C++
2015-06-09 20:25:24
对象是类的一个实例,如果将对象比作房子,那么类相当于是房子的设计图纸。类可以将数据和函数封装在一起,其中函数表示了类的行为,类提供了public,protected和private用于声明那些数据是公有的,受保护的和私有的。
有两种说法:
1. 主张以数据为中心,习惯上将private类型的数据写在前面,将public类型的函数写在后面。关注类的内部数据结构。
2. 主张以行为为中心,将public类型的函数写在前面,将private类型的数据写在后面,关注类提供的服务和接口。
继承和组合
如果A是基类,B是A的派生类,那么B将继承A的数据和函数。
继承的规范:
1. 如果类A和类毫不相关,不可以为了使B的功能更多些让B继承A的功能。
2. 如果类B有必要使用A的功能,则要分两种情况考虑。
(1) 如果逻辑上B是A的一种,则允许B继承A的功能。比如Human和man
(2) 若在逻辑上A是B的一部分,则不允许B继承A的功能,而是要用A和其它东西组合出B,比如eys和head。
那如果允许Head从Eye,Ear派生而成,那么Head将自动具备Look,Listen的功能。
而class Head : public Eye, public Ear
{
};
虽然可以正常运行,但是设计上却是错误的。
虚函数和多态
除了继承外,C++支持多态,即允许将派生类的对象当成基类的对象使用。如果A是基类,B和C是A的派生类,多态函数Test的参数A的指针。那么Test函数可以引用ABC的对象。
C++用virtual来声明虚函数,派生类的虚函数将(override)基类对应的虚函数的功能。
1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。可以提高程序的可复用性。
2. 派生类的功能可以被基类指针引用,即向后兼容。提高程序的可扩展性和可维护性。
命名约定
1. 宏定义用大写字母加下划线表示,MAX??_LENGETH;
2. 函数用大写字母开头的单词表示,SetName,GetName;
3. 指针变量加前缀p,*pNode
4. BOOL变量加前缀b,bFlag
5. Int变量加前缀i,iWidth
6. Float变量加前缀f,fwidth
7. Double变量加前缀d,dwidth;
8. 字符串变量加前缀str,strName
9. 美剧变量加前缀e,eDrawMode
10. 类的成员变量加前缀m_,m_strName,m_iWidth
对于int,float,double型变量,如果变量名的含义十分明显,则不加前缀,如int的i,j,k。float型的三围坐标(x,y,z)
使用断言
程序分为debug版本和release版本,dedug版本用于内部调试,release版本发行给用户使用。断言assert是仅仅在Debug版本起作用的宏,他勇于检查不该发生的情况。
程序员可以把assert看成一个在任何系统状态下都可以安全使用的无害测试手段。
断言的几个原则
1. 使用断言捕捉不应该发生的无法情况,不要混淆非法情况与错误情况之间的区别,后者是必然存在的并且有一定要作出处理的。
2. 使用断言对函数的参数进行确认
3. 在编写函数的时候,要想好哪些假设,并对断言进行检查。、
New、delete与指针
在C++中,用操作符new申请内存,操作符delete释放内存,在c语言中,用malloc申请内存,free释放内存。
New可以申请对象的内存,malloc不能
New申请的内存,必须用delete而不能用free释放
用malloc申请的内存必须用free而不能用delete释放。
用delete或者free释放p所指向的内存后,应该马上显式的将p置为NULL,防止下次使用p时发生错误。
预防野指针,野指针是指向垃圾内存的指针。主要有两个原因:
1. 指针没有初始化
2. 指针指向已经释放的内存,不好防
野指针实例
使用const
在定义一个常量时,const比#define更灵活,用const定义的常量含有数据类型,该变量可以参与逻辑运算。
Const int LENGTH = 100; //int类型
#difine LENGTH 100 //LENGTH 无类型
除了能定义常量外,const 还有两个保护功能
1. 强制保护函数的参数值不发生变化
如果在g,h加入const,以确保函数的代码不会改变该参数的值
强制保护类的成员函数不改变任何数据成员的值
类stack的成员函数count仅用于计数,为了确保count不改变类中的任何数据成员的值,应将函数count定义为const类型。
C++的相关建议
1. 不要编写一条过分复杂的语句,紧凑的C++/代码并不见得能得到搞笑的机器代码,却会降低程序的可理解性,程序出错的概率大大提高。
2. 不要编写集多种功能于一身的函数,在函数的返回值中,不能将正常值和错误标志混在一起。
3. 不要将BOOL值TRUE和FALSE对应1和0进行编程。
4. 不要将==写成=
5. 不要讲123携程0123,后者是八进制的数值
6. 把自己经常犯的编程错误记录下来,支撑表格贴在计算机旁边。
多态(Polymorphism)是指类中统一函数名对应多个具有想死功能的不同函数,可以使用相同的调用发放来调用这些具有不同功能的不同函数。可以使用相同的调用方式来调用这些具有不同功能的同名函数。继承性和多态性的结合,可以生成一些类岁类似但独一无二的对象,由于继承性,这些对象共享许多相似的特征。由于多态性,针对相同的消息。