一、类和对象的基本概念结构化程序设计C语言使用结构化程序设计程序 数据结构 算法程序由全局变量以及众多相互调用的函数组成 。算法以函数的形式实现用于对数据结构进行操作。结构化程序设计的不足1.结构化程序设计中函数和其所操作的数据结构没有直观的联系。2.随着程序规模的增加程序逐渐难以理解很难一下子看出来某个数据结构到底有哪些函数可以对它进行操作某个函数到底是用来操作哪些数据结构的任何两个函数之间存在怎样的调用关系3.结构化程序设计没有“封装”和“隐藏”的概念。 要访问某个数据结构中的某个变量就可以直接访问那么当该变量的定义有改动的时候就要把所有访问该变量的语句找出来修改十分不利于程序的维护、扩充。4.难以查错当某个数据结构的值不正确时难以找出到底是那个函数导致的。5.重用在编写某个程序时发现其需要的某项功 能在现有的某个程序里已经有了相同或类似的 实现那么自然希望能够将那部分代码抽取出来 在新程序中使用。6.在结构化程序设计中随着程序规模的增大由 于程序大量函数、变量之间的关系错综复杂要抽取这部分代码会变得十分困难。总之结构化的程序在规模庞大时会变得难以理解难以扩充增加新功能难以查错难以重用。如何更高效地实现函数的复用如何更清晰的实现变量和函数的关系使得程序 更清晰更易于修改和维护。面向对象的程序设计面向对象的程序 类 类 … 类面向对象的程序设计方法将某类客观事物共同特点属性归纳出来形成一个数据 结构可以用多个变量描述事物的属性将这类事物所能进行的行为也归纳出来形成一个个函数 这些函数可以用来操作数据结构(这一步叫“抽象”。然后通过某种语法形式将数据结构和操作该数据结构的函 数“捆绑”在一起形成一个“类”从而使得数据结构和操作该数据结构的算法呈现出显而易见的紧密关系这就是“封装”。面向对象的程序设计具有“抽象”“封装”“继承”“多态” 四个基本特点。例如将长、宽变量和设置长宽求面积以及求周长的三个函数“封装”在一起就能形成一个“矩形类”。长、宽变量成为该“矩形类”的“成员变量”三个函数成为该类的“成员函数” 。 成员变量和成员函数统称为类的成员。1234567891011121314classCRectangle{public:intw, h;intArea() {returnw * h;}intPerimeter(){return2 * ( w h);}voidInit(intw_,inth_ ) {w w_; h h_;}};// 必须有分号通过类可以定义变量。类定义出来的变量也称为类的实例就是我们所说的“对象” 。C中类的名字就是用户自定义的类型的名字。可以象使用基本类型那样来使用它。CRectangle 就是一种用户自定义的类型。12345678910intmain( ){intw,h;CRectangle r;//r 是一个对象cin w h;r.Init( w,h);cout r.Area() endlr.Perimeter();return0;}对象的内存分配类的内存分配与结构体分配内存相同类的成员函数所占内存不属于类。每个对象各有自己的存储空间。一个对象的某个成员变量被改变了不会影响到另一个对象。和结构变量一样对象之间可以用 “”进行赋值但是不能用 “”“!”“”,“”“”“”进行比较除非这些运算符经过了“重载”第四篇讲。使用类的成员变量和成员函数用法1对象名.成员名123CRectangle r1,r2;r1.w 5;r2.Init(5,4);用法2 指针-成员名12345CRectangle r1,r2;CRectangle * p1 r1;CRectangle * p2 r2;p1-w 5;p2-Init(5,4);//Init作用在p2指向的对象上用法3引用名.成员名1234CRectangle r2;CRectangle rr r2;rr.w 5;rr.Init(5,4);//rr 的值变了r2 的值也变二、类和对象基础 类成员的可访问范围在类的定义中用下列访问范围关键字来说明类成员可被访问的范围private: 私有成员只能在成员函数内访问public : 公有成员可以在任何地方访问protected: 保护成员后面再说暂时理解和私有成员类似以上三种关键字出现的次数和先后次序都没有限制。代码如下示例12345678classclassName {private:私有属性和函数public:公有属性和函数protected:保护属性和函数};如过某个成员前面没有上述关键字则缺省地被认为是私有成员。12345678classMan {intnAge;// 私有成员charszName[20];// 私有成员public:voidSetName(char* szName){strcpy( Man::szName,szName);}};在类的成员函数内部能够访问当前对象的全部属性、函数同类其它对象的全部属性、函数。在类的成员函数以外的地方只能够访问该类对象的公有成员。成员函数在类内声明一般在类外实现也可类内声明并实现需要加上“类名::”。123456789101112131415161718192021222324252627classCEmployee {private:charszName[30];// 名字public:intsalary;// 工资voidsetName(char* name);voidgetName(char* name);voidaverageSalary(CEmployee e1,CEmployee e2);};voidCEmployee::setName(char* name) {strcpy( szName, name);//ok}voidCEmployee::getName(char* name) {strcpy( name,szName);//ok}voidCEmployee::averageSalary(CEmployee e1,CEmployee e2){cout e1.szName;//ok 访问同类其他对象私有成员salary (e1.salary e2.salary )/2;}intmain(){CEmployee e;strcpy(e.szName,Tom1234567889);// 编译错不能访问私有成员e.setName(Tom);// oke.salary 5000;//okreturn0;}设置私有成员的机制叫“隐藏”“隐藏”的目的是强制对成员变量的访问一定要通过成员函数 进行那么后成员变量的类型等属性修改后只需要更改成员函数即可。否则所有直接访问成员变量的语句都需要修改。
C++类和对象基础详解
一、类和对象的基本概念结构化程序设计C语言使用结构化程序设计程序 数据结构 算法程序由全局变量以及众多相互调用的函数组成 。算法以函数的形式实现用于对数据结构进行操作。结构化程序设计的不足1.结构化程序设计中函数和其所操作的数据结构没有直观的联系。2.随着程序规模的增加程序逐渐难以理解很难一下子看出来某个数据结构到底有哪些函数可以对它进行操作某个函数到底是用来操作哪些数据结构的任何两个函数之间存在怎样的调用关系3.结构化程序设计没有“封装”和“隐藏”的概念。 要访问某个数据结构中的某个变量就可以直接访问那么当该变量的定义有改动的时候就要把所有访问该变量的语句找出来修改十分不利于程序的维护、扩充。4.难以查错当某个数据结构的值不正确时难以找出到底是那个函数导致的。5.重用在编写某个程序时发现其需要的某项功 能在现有的某个程序里已经有了相同或类似的 实现那么自然希望能够将那部分代码抽取出来 在新程序中使用。6.在结构化程序设计中随着程序规模的增大由 于程序大量函数、变量之间的关系错综复杂要抽取这部分代码会变得十分困难。总之结构化的程序在规模庞大时会变得难以理解难以扩充增加新功能难以查错难以重用。如何更高效地实现函数的复用如何更清晰的实现变量和函数的关系使得程序 更清晰更易于修改和维护。面向对象的程序设计面向对象的程序 类 类 … 类面向对象的程序设计方法将某类客观事物共同特点属性归纳出来形成一个数据 结构可以用多个变量描述事物的属性将这类事物所能进行的行为也归纳出来形成一个个函数 这些函数可以用来操作数据结构(这一步叫“抽象”。然后通过某种语法形式将数据结构和操作该数据结构的函 数“捆绑”在一起形成一个“类”从而使得数据结构和操作该数据结构的算法呈现出显而易见的紧密关系这就是“封装”。面向对象的程序设计具有“抽象”“封装”“继承”“多态” 四个基本特点。例如将长、宽变量和设置长宽求面积以及求周长的三个函数“封装”在一起就能形成一个“矩形类”。长、宽变量成为该“矩形类”的“成员变量”三个函数成为该类的“成员函数” 。 成员变量和成员函数统称为类的成员。1234567891011121314classCRectangle{public:intw, h;intArea() {returnw * h;}intPerimeter(){return2 * ( w h);}voidInit(intw_,inth_ ) {w w_; h h_;}};// 必须有分号通过类可以定义变量。类定义出来的变量也称为类的实例就是我们所说的“对象” 。C中类的名字就是用户自定义的类型的名字。可以象使用基本类型那样来使用它。CRectangle 就是一种用户自定义的类型。12345678910intmain( ){intw,h;CRectangle r;//r 是一个对象cin w h;r.Init( w,h);cout r.Area() endlr.Perimeter();return0;}对象的内存分配类的内存分配与结构体分配内存相同类的成员函数所占内存不属于类。每个对象各有自己的存储空间。一个对象的某个成员变量被改变了不会影响到另一个对象。和结构变量一样对象之间可以用 “”进行赋值但是不能用 “”“!”“”,“”“”“”进行比较除非这些运算符经过了“重载”第四篇讲。使用类的成员变量和成员函数用法1对象名.成员名123CRectangle r1,r2;r1.w 5;r2.Init(5,4);用法2 指针-成员名12345CRectangle r1,r2;CRectangle * p1 r1;CRectangle * p2 r2;p1-w 5;p2-Init(5,4);//Init作用在p2指向的对象上用法3引用名.成员名1234CRectangle r2;CRectangle rr r2;rr.w 5;rr.Init(5,4);//rr 的值变了r2 的值也变二、类和对象基础 类成员的可访问范围在类的定义中用下列访问范围关键字来说明类成员可被访问的范围private: 私有成员只能在成员函数内访问public : 公有成员可以在任何地方访问protected: 保护成员后面再说暂时理解和私有成员类似以上三种关键字出现的次数和先后次序都没有限制。代码如下示例12345678classclassName {private:私有属性和函数public:公有属性和函数protected:保护属性和函数};如过某个成员前面没有上述关键字则缺省地被认为是私有成员。12345678classMan {intnAge;// 私有成员charszName[20];// 私有成员public:voidSetName(char* szName){strcpy( Man::szName,szName);}};在类的成员函数内部能够访问当前对象的全部属性、函数同类其它对象的全部属性、函数。在类的成员函数以外的地方只能够访问该类对象的公有成员。成员函数在类内声明一般在类外实现也可类内声明并实现需要加上“类名::”。123456789101112131415161718192021222324252627classCEmployee {private:charszName[30];// 名字public:intsalary;// 工资voidsetName(char* name);voidgetName(char* name);voidaverageSalary(CEmployee e1,CEmployee e2);};voidCEmployee::setName(char* name) {strcpy( szName, name);//ok}voidCEmployee::getName(char* name) {strcpy( name,szName);//ok}voidCEmployee::averageSalary(CEmployee e1,CEmployee e2){cout e1.szName;//ok 访问同类其他对象私有成员salary (e1.salary e2.salary )/2;}intmain(){CEmployee e;strcpy(e.szName,Tom1234567889);// 编译错不能访问私有成员e.setName(Tom);// oke.salary 5000;//okreturn0;}设置私有成员的机制叫“隐藏”“隐藏”的目的是强制对成员变量的访问一定要通过成员函数 进行那么后成员变量的类型等属性修改后只需要更改成员函数即可。否则所有直接访问成员变量的语句都需要修改。