分类: C/C++
2010-01-14 00:29:51
C++中类的概念让很多新学者都困惑不解,很多书上对这部分也没有系统的整理,往往显的章节杂乱无章,概念满天飞。其实经过仔细的思考,我发现类中的概念还是计较系统的,现在整理如下,顺便理一下思路,也为以后的学习做好更好的铺垫。 总体的思路如以下的顺序 1.类的定义---其实就是定义了新的类型,同以前经典的类型如int,char等没有任何区别。只是这个类定义中不但包含了数据(属性),而且还有函数(方法)罢了. 2.对象的定义---使用新的类型,生成该类型的一个变量,在OOP中就叫对象或者实例。 3.对象的初始化---对象的初始化与一般变量的初始化基本相同,就是让这个变量内部的数据有值。 4.类内部的数据变量的不同类型----一般变量、静态数据变量、常数据变量、内含另一个类对象的数据变量 5.类内部的成员函数的不同类型----就好像是一般的函数,不过又分为一般函数、静态函数、常函数等 6.对象的操作---对象进行赋值操作、加法操作、减法操作等,这部分其实就是运算符重载啦! 1。类的定义 1.1类定义的三种写法: a。方法写在类定义的内部(内联函数) b。方法写在类定义的外部(外联函数) c。类的定义写在外部文件中 2。对象的定义 2.1对象定义的两种方法 a。类名 对象名(带参数与不带参数) b。类名 *指针变量=new 类名() 2.2对象定义时的不同位置 a。定义在所有函数的外部--全局对象 b。定义在函数的内部---局部对象 c。定义在函数的内部,但是前面有关键字static---静态局部对象 d。定义堆对象----使用new操作符。 e。定义时前面加有关键字const ---常对象 3。对象的初始化 对象的初始化就像一般变量的初始化,一般变量的初始化方法有三种: a。int a=10; b。int b;b=10;int a=b; c。int b;b=10;int a(b); 相对应的对象的初始化也有三种方式 a。不但参数的构造函数的初始化 b。带参数的构造函数的初始化 c。复制构造函数的初始化---使用一个现有对象来初始化另一个对象。这里有一个浅拷贝与深拷贝的概念哟!很重要 。 既然对象的初始化时,需要构造函数,当然死亡时,就应该有析构函数了,析构函数的调用顺序与构造函数的调用顺序永远相反,为什么?看看栈吧!哈哈。 4。类内部的数据变量的不同类型 只要记住以下几个规律即可 a。静态数据成员,在类定义的下面,main函数的上面一定要初始化。 b。静态数据成员为所有的对象公有,最经典的例子就是对象计数器了。 c。类内如果定义了常数据成员,就是数据成员的前面有关键字const,那么它的初始化必须放在构造函数的初始化列表中,为什么?因为常量一出生就要有值,而且不允许修改,没办法在构造函数内部赋值呀!明白了吧! d。类内包含一个另外一个类的对象时,有点麻烦,分开讲 1。我称内部包含的这个类对象为内含类对象。 2。内含类对象的初始化必须放在构造函数的初始化列表中。 3。内含类对象与包含它的类对象的构造函数的顺序是:内含类的构造函数--->外部类的构造函数 5。类内部的成员函数的不同类型 a。静态成员函数在对象还没有出生的时候已经存在,所以可以通过类名调用,类名::方法名() b。静态成员函数严禁对类的非静态数据操作 c。常对象、常成员函数 1。常成员函数的定义时,const不能放在前面,而是放在函数定义()的后面,标志着const限制的是函数里面的操作,这样常成员函数在内部就不能改变对象的数据成员了,只能读取。 2。常对象只能调用常成员函数,一般对象即可以一般函数,而且可以调用常成员函数,但是一般函数的优先级要高于常成员函数。 6。运算符的重载 a。作为内部函数重载---有一个参数,并且函数不能使用带有缺省值参数的函数 b。作为友元函数重载---有两个参数 |