




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
七、面向对象编程1、 面向对象将储存在结构中的数据与过程的功能组合成一个单元。2、 创建新类型在C+中,程序员可以通过创建所需的任何类型来扩展该语言,每种新类型都可以有与内置类型相同的功能。通过将相关变量组合成结构,提供了C语言中增加新类型的功能。使用typedef语句,可让结构成为一种新的数据类型。typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字。3、 类和成员类:将一组变量(它们的类型通常不同)和一组相关的函数组合在一起。类可以由各种类型的变量组成,还可以包含其它类对象。类中的变量被称为成员变量或数据成员。成员变量是类的组成部分。类还可以包含函数,它们被称为成员函数或方法。成员函数也是类的组成部分。类中的成员函数通常操纵成员变量。声明类:类声明将有关类的信息告诉编译器。要声明类,课使用关键字class,后跟类名、左大括号、数据成员列表和方法,然后是右大括号和分号。例:class Catint itsAge;int itsWeight;void Meow();注意:a、必须给所有成员变量、成员函数和类命名。定义对象:声明一个类后,便可以将其用作新类型来声明这种类型的变量。声明新类型对象的方式与声明整型变量相同。例:int age; Cat Tom;4、 访问类成员定义实际的Cat对象(如Cat Tom)后,便可以使用句点运算符(.)来访问该对象的成员。使用方法:Tom.itsAge=3;Tom.Meow();给对象赋值,而不是给类赋值。例:Cat.itsAge=3 /wrong正确的方法是:Cat Tom; /就像int x;Tom.itsAge=3; /就像 x=5;类不能有没有声明的功能。例:Cat Tom;Tom.Bark();/类中没有定义Bark函数,因此猫不能叫注意:a、声明和定义不能混为一谈。声明指出类是什么,定义为对象分配内存。a、 不能将值赋给类,而应该将值赋给数据成员。5、 私有和公有在类中声明还常常使用其他关键字,其中最重要的两个是public和private。关键字public和private用于类的成员:数据成员和成员方法。私有成员只能在类的方法中访问;公有成员可以通过类的任何对象进行访问。默认情况下,所有成员都是私有的。例:class Catint itsAge;int itsWeight;void Meow();int main()Cat Tom;Tom.itsAge=3;/错误!不能访问私有数据声明公有成员:class Catpublic:int itsAge;int itsWeight;void Meow();/此程序用于演示访问一个简单类的公有成员#includeclass Catpublic:int itsAge;int main()using std:cout;using std:endl;Cat Tom;Tom.itsAge=3;coutTom是一只Tom.itsAge岁大的猫。endl;return 0;使用数据成员私有:一个通用的设计规则是,应让类的数据成员私有。为访问类中的私有数据,必须创建被存取器方法(accessor method)的公有函数。这些方法用于设置和获取私有成员变量,它们是成员函数可以在程序的其它地方调用它们来获取和设置私有成员变量的值。存取器函数让你能够将数据的存储细节和使用细节分开,通过使用存取器函数,以后修改数据的存储方式时,不必重新编写使用这些数据的函数。存取器函数还可以包含其他逻辑。比如Cat的年龄不太可能大于100等。/这是一个包含存取器方法的类#includeclass Catpublic:int GetAge();void SetAge(int Age);int GetWeight();int SetWeight(int Weight);void Meow();private:int itsAge;int itsWeight;要设置Tom的年龄,可以将年龄传给SetAge()函数。如:Cat Tom;Tom.SetAge(3);注意:a、务必将存取器函数声明为公有。b、 必须通过类的成员函数来访问私有成员变量。c、 尽可能不要将成员变量声明为公有。d、 不要试图在类的外部使用私有成员变量。6、 实现类方法存取器函数提供了到类的私有成员数据的公有接口。每个存取器函数以及声明的其他类方法都必须有实现。实现被称为函数的定义。成员函数的定义类似于常规函数:首先指出函数的返回类型,如果函数不返回任何值,则使用void。然后是类名、两个冒号、函数名和参数。/此程序用于演示实现一个简单类的方法#includeclass Catpublic:int GetAge();void SetAge(int Age);void Meow();private:int itsAge;int Cat:GetAge()return itsAge;void Cat:SetAge(int Age)itsAge=Age;void Cat:Meow()std:coutMeown;int main()Cat Tom;Tom.SetAge(3);std:coutTom是一只;std:coutTom.GetAge()岁大的猫。n;Tom.Meow();return 0;7、 构造函数和析构函数初始化类的成员函数,可以使用一个特殊的成员函数:构造函数。构造函数可以根据需要接受参数,但它不能有返回值连void都不行。构造函数是一个与类同名的类方法。声明构造函数后还应声明析构函数。构造函数声明并初始化类对象,而析构函数在对象被销毁后完成清理工作并释放(在构造函数或对象的生命周期中)分配的资源或内存。析构函数总是与类同名,但在前加上了一个()。析构函数没有参数也没有返回值。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数,它也不进行任何操作。例:为Cat声明一个析构函数Cat();默认构造函数和析构函数:没有参数的构造函数被称为默认构造函数。编译器创建的默认构造函数和析构函数不仅没有参数,而且不执行任何操作。如果希望它们执行一些操作,必须创建自己的默认构造函数或析构函数。使用默认构造函数在某种程度上说,所有对象都必须被构造和析构,在构造和析构过程中,将调用这些不执行任何操作的函数。声明对象时不用传递任何参数。如:Cat Tom;必须有一个下面这样的构造函数:Cat();创建对象时将调用构造函数。若Cat构造函数接受两个参数,则:Cat Tom(3,5);第一个参数可能是年龄,第二个参数可能是重量。若构造函数为默认构造函数,则:Cat Tom;/对象后没有括号/此程序用于演示使用构造函数和析构函数#includeclass Catpublic:Cat(int Age);Cat();int GetAge();void SetAge(int age);void Meow();private:int itsAge;Cat:Cat(int Age)itsAge=Age;Cat:Cat()int Cat:GetAge()return itsAge;void Cat:SetAge(int age)itsAge=age;void Cat:Meow()std:coutMeown;int main()Cat Tom(3);std:coutTom是一只Tom.GetAge()岁大的猫。n;Tom.Meow();return 0;8、 const成员函数关键字const可以用来声明不能修改的变量。也可将关键字const用于类中的成员函数。要将类方法声明为const,可在方法声明中将所有参数括起的括号和分号之间放置关键字const。如:void someFunction() const;由于它被声明为const,因此不会修改其所属类的任何数据成员。如果将一个函数声明为const的,而该函数的是实现通过修改某个成员变量的值而修改了对象,编译器将视其为错误。尽可能将方法声明为const的,是一种良好的编程习惯。这样让编译器捕获错误,而不致于称为等到程序运行时才出现bug。9、 类声明和方法定义的位置为类声明的每一个函数都必须有定义,这种定义被称为函数实现。定义必须位于编译器能够找到的文件中。也可以将声明放在实现文件中,但这不是一种好的编程习惯。大多数程序员采用的约定是,将声明放在头文件中,该头文件的名称与实现文件相同,但扩展名为.h、.hp或.hpp。例:可以将Cat类的声明放在一个名为Cat.hpp的文件中,而将类方法的定义放在一个名为Cat.cpp的文件中。然后在Cat.cpp的开头加入如下代码,将头文件同.cpp文件关联起来:#include “Cat.hpp”这段代码告诉编译器,将Cat.hpp读入文件中。10、 内联实现就像可以请求编译器将常规函数内联一样,也可以将类方法内联,只需在返回类型前加上关键字inline。例:inline int Cat:GetWeight()return itsWeight;也可以将函数的定义放到类声明中,这样,函数将自动成为内联的。如:class Catpublic:int GetWeight() return itsWeight;void SetWeight (int aWeight);内联函数的函数体紧跟在类方法声明之后,圆括号后没有分号。11、 将他类用作成员数据的类一种常见的创建复杂类的方法是,首先声明较简单的类,然后再将其包含到较复杂的类的声明中。先创建一个头文件,声明一个完整的类。/声明一个完整的类/点、线、面积#includeclass Point/声明一个类,储存点的坐标x,ypublic:void SetX(int x) itsX=x;void SetY(int y) itsY=y;int GetX() const return itsX;int GetY() const return itsY;private:int itsX;int itsY;class Rectanglepublic:Rectangle(int top,int left,int bottom,int right);Rectangle() int GetTop() const return itsTop;int GetLeft() const return itsLeft;int GetBottom() const return itsBottom;int GetRight() const return itsRight;Point GetUpperLeft() const return itsUpperLeft;Point GetLowerLeft() const return itsLowerLeft;Point GetUpperRight() const return itsUpperRight;Point GetLowerRight() const return itsLowerRight;void SetUpperLeft(Point Location) itsUpperLeft=Location;void SetLowerLeft(Point Location) itsLowerLeft=Location;void SetUpperRight(Point Location) itsUpperRight=Location;void SetLowerRight(Point Location) itsLowerRight=Location;int GetArea() const;private:Point itsUpperLeft;Point itsLowerLeft;Point itsUpperRight;Point itsLowerRight;int itsTop;int itsLeft;int itsBottom;int itsRight;/包含类Rectangle#includeRectangle.hRectangle:Rectangle(int top,int left,int bottom,int right)itsTop=top;itsLeft=left;itsBottom=bottom;itsRight=right;itsUpperLeft.SetX(left);itsUpperLeft.SetY(top);itsUpperRight.SetX(right);itsUpperRight.SetY(top);itsLowerLeft.SetX(left);itsLowerLeft.SetY(bottom);itsLowerRight.SetX(right);itsLowerRight.SetY(bottom);int Rectangle:GetArea() constint Width=itsRight-itsLeft;int Height=itsTop-itsBottom;return (Width*
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环境卫生监测与数据报告模版
- 2024中国中信金融资产管理股份有限公司北京市分公司招聘笔试备考题库及答案详解(夺冠)
- 水利安全生产知识竞赛试题合集
- 季度安全培训课堂记录课件
- 屋面瓦更换工程施工合同模板范例
- 2021年高考真题江苏卷物理试题(解析版)
- 基础工程施工技术规范与质量控制
- 九年级语文知识点归纳与应试策略
- 中考毕业班班主任管理实务操作手册
- 妇联改革课件
- 2023年化工检修钳工题库及答案
- GA/T 1707-2020防爆安全门
- 教师调课申请表
- 会展项目管理教材 课件
- 酒店文化全套教学课件
- 基于位置的服务LBS课件
- 钻孔桩桩底沉渣处理高压注浆方案
- 收益权投资协议书范本
- 电能质量基础知识培训
- 自由贸易试验区跨境债券业务登记托管、清算结算实施细则
- 平行平板多光束干涉20111107第十三次课
评论
0/150
提交评论