Chinaunix首页 | 论坛 | 博客
  • 博客访问: 174666
  • 博文数量: 64
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 616
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-09 20:25
文章分类

全部博文(64)

文章存档

2016年(25)

2015年(39)

我的朋友

分类: C/C++

2015-06-09 20:25:24

对象是类的一个实例,如果将对象比作房子,那么类相当于是房子的设计图纸。类可以将数据和函数封装在一起,其中函数表示了类的行为,类提供了publicprotectedprivate用于声明那些数据是公有的,受保护的和私有的。

有两种说法:

1.       主张以数据为中心,习惯上将private类型的数据写在前面,将public类型的函数写在后面。关注类的内部数据结构。


2主张以行为为中心,将public类型的函数写在前面,将private类型的数据写在后面,关注类提供的服务和接口。

继承和组合

如果A是基类,BA的派生类,那么B将继承A的数据和函数。


继承的规范:

1.       如果类A和类毫不相关,不可以为了使B的功能更多些让B继承A的功能。

2.       如果类B有必要使用A的功能,则要分两种情况考虑。

(1)       如果逻辑上BA的一种,则允许B继承A的功能。比如Humanman

(2)       若在逻辑上AB的一部分,则不允许B继承A的功能,而是要用A和其它东西组合出B,比如eyshead

那如果允许HeadEyeEar派生而成,那么Head将自动具备LookListen的功能。

class Head : public Eye, public Ear

{

};

虽然可以正常运行,但是设计上却是错误的。

 

虚函数和多态

除了继承外,C++支持多态,即允许将派生类的对象当成基类的对象使用。如果A是基类,BCA的派生类,多态函数Test的参数A的指针。那么Test函数可以引用ABC的对象。

 

 

 

 

 

C++virtual来声明虚函数,派生类的虚函数将(override)基类对应的虚函数的功能。

 

1.       应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。可以提高程序的可复用性。

2.       派生类的功能可以被基类指针引用,即向后兼容。提高程序的可扩展性和可维护性。

命名约定

1.       宏定义用大写字母加下划线表示,MAX??_LENGETH;

2.       函数用大写字母开头的单词表示,SetNameGetName

3.       指针变量加前缀p*pNode

4.       BOOL变量加前缀bbFlag

5.       Int变量加前缀iiWidth

6.       Float变量加前缀ffwidth

7.       Double变量加前缀ddwidth

8.       字符串变量加前缀strstrName

9.       美剧变量加前缀eeDrawMode

10.   类的成员变量加前缀m_m_strNamem_iWidth

对于intfloatdouble型变量,如果变量名的含义十分明显,则不加前缀,如intijkfloat型的三围坐标(x,y,z

 

使用断言

程序分为debug版本和release版本,dedug版本用于内部调试,release版本发行给用户使用。断言assert是仅仅在Debug版本起作用的宏,他勇于检查不该发生的情况。


 

程序员可以把assert看成一个在任何系统状态下都可以安全使用的无害测试手段。

断言的几个原则

1.       使用断言捕捉不应该发生的无法情况,不要混淆非法情况与错误情况之间的区别,后者是必然存在的并且有一定要作出处理的。

2.       使用断言对函数的参数进行确认

3.       在编写函数的时候,要想好哪些假设,并对断言进行检查。、

Newdelete与指针

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.       强制保护函数的参数值不发生变化

如果在gh加入const,以确保函数的代码不会改变该参数的值

 

强制保护类的成员函数不改变任何数据成员的值

stack的成员函数count仅用于计数,为了确保count不改变类中的任何数据成员的值,应将函数count定义为const类型。

C++的相关建议

1.  不要编写一条过分复杂的语句,紧凑的C++/代码并不见得能得到搞笑的机器代码,却会降低程序的可理解性,程序出错的概率大大提高。

2.  不要编写集多种功能于一身的函数,在函数的返回值中,不能将正常值和错误标志混在一起。

3.  不要将BOOLTRUEFALSE对应10进行编程。

4.  不要将==写成=

5.  不要讲123携程0123,后者是八进制的数值

6.  把自己经常犯的编程错误记录下来,支撑表格贴在计算机旁边。

 

多态(Polymorphism)是指类中统一函数名对应多个具有想死功能的不同函数,可以使用相同的调用发放来调用这些具有不同功能的不同函数。可以使用相同的调用方式来调用这些具有不同功能的同名函数。继承性和多态性的结合,可以生成一些类岁类似但独一无二的对象,由于继承性,这些对象共享许多相似的特征。由于多态性,针对相同的消息。

 

阅读(759) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:linux 文件系统

给主人留下些什么吧!~~