教程 从入门到精通 chap 06
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第6页/共42页
使用类和对象
第7页/共42页
一位数的四则运算
第8页/共42页
构造函数与析构函数
第9页/共42页
构造函数
• 所谓构造函数就是在对象创建时起作用的一
个特殊成员函数,因此通常使用构造函数来 实现类中数据的初始化。
• 构造函数从形式上看就是一个函数,但是规
定它必须与类的名字一致,并且没有返回类 型。
关于构造函数的说明
• 虽然构造函数不允许有返回值,但是它可以
带一个或多个参数。参数的写法与一般函数 的参数一样,只是在调用这个构造函数的时 候必须指明参数的值。
第13页/共42页
内联函数
第14页/共42页
内联函数
• 内联函数存的意义在并不是为了实现面向对
象程序设计,而是为了提高程序的执行效率。 –如果定义一个类的成员函数是内联函数,那么在
• 使用delete运算符销毁对象
–delete p;
第25页/共42页
使用指向对象的指针
第26页/共42页
使用指向对象的指针实现例6.6的 功能
第27页/共42页
在函数中使用对象
第28页/共42页
在函数中使用对象时构造函数与析 构函数的作用
第29页/共42页
通过引用传递对象
第30页/共42页
用下面的语句: • Circle objCircle;
–Circle是类名 –objCircle是对象名。 –类在定义完成并经过编译后系统并不会在内存中为这个类
分配空间,而是在定义了这个类的对象的时候才会为这个 对象分配内存空间。因此可以说类是一个抽象逻辑框架, 它定义了它的成员之间的关系,而对象则是类的实例,只 有对象才真正占用内存空间。
的作用域内有效,因此对静态数据成员的初始化 和函数体的定义都必须在类的外面,并且不用定 义类的对象,就可以访问静态数据成员。
第19页/共42页
使用静态数据成员
第20页/共42页
对象数组
第21页/共42页
定义对象数组
• 定义对象数组的方法与定义普通数组的方法
相似。只要定义了类,就可以定义这个类的 对象数组。
类和对象的基本概念
第1页/共42页
面向对象程序设计的特点
• 封装
–封装性是指将代码和代码所要处理的数据绑定在
一起,并采用一定的机制保证代码和数据的安全, 不受外部因素的干扰
• 多态
–指在继承的基础上允许使用同一个接口来访问一
类通用的操作
• 继承
–一个对象从其他对象中获取成员的过程
第2页/共42页
定义类
友元
第35页/共42页
友元
• 一般情况下,只有类的成员函数才可以访问
这个类的私有数据成员。
Biblioteka Baidu• 如果定义一个非成员函数为这个类的友元函
数,那么这个函数也有权利访问这个类的私 有数据成员。
第36页/共42页
定义友元函数
• 在类的内部写出函数的原型,并在函数原型
第22页/共42页
使用对象数组
第23页/共42页
指向对象的指针
• 定义指向对象指针的方法与前面讲到的定义指针的
方法相似。 –例如,如果定义了类test,它有两个公有数据成员i和j,
以及一个公有成员函数print(),那么就可以采用下面的 方法定义一个指向对象的指针p:
• test *p;
–为这个类创建了一个对象mytest
调用内联函数时,这个函数是在被调用的点进行 内联扩展,即把被调用的内联函数的代码原样不 动地复制到主调函数中,而无须进行前面提到的 所有操作,这样可以省略很多CPU时间,因此它可 以使程序的整个运行速度加快。
第15页/共42页
定义内联函数
• 第一种方法是在定义
类时把函数的函数体 写在类的里面
• 第二种方法是仍然在
类中只写成员函数的 原型,而在类的外面 定义成员函数的函数 体时在前面加上 inline关键字。
第16页/共42页
使用内联函数
第17页/共42页
静态成员
第18页/共42页
静态成员
• 静态数据成员和静态成员函数
–定义方法
• 在定义数据成员和成员函数原型时在前面加上static
关键字。
–C++认定静态成员与全局变量一样,在整个文件
• p=&mytest;
–为了能够通过p来访问mytest的成员i, j和print,需要使
用指向操作符“->”: • p->i • p->j • p->print
第24页/共42页
使用指向对象的指针来创建对象
• 使用new运算符创建对象
–test *p=new test; –或者 –test *p; –p=new test;
第10页/共42页
析构函数
• 析构函数则是构造函数的补充。析构函数是
在对象被销毁之前起作用的特殊成员函数, 通常用于做一些收尾的工作。
• 析构函数看起来也与一般成员函数一样,但
是它的函数名必须是它所属类的类名前面加 上一个~,并且同样不允许有返回值。
第11页/共42页
使用构造函数和析构函数
第12页/共42页
• Public
–表示公有类型,它表示该类数据成员和成员函数都是类的
公有成员,既可以被本类中的成员函数访问,也可以被类 之外的函数访问。因此公有成员可以作为类与外部的接口。
• Protected
–表示保护类型,它表示该类数据成员和成员函数都是类的
保护成员,这样的成员允许其他的类继承。
第4页/共42页
定义类的通式
class 类名 {
private: 私有数据成员 私有成员函数
public: 公有数据成员 公有成员函数
protected: 保护数据成员 保护成员函数
};
第5页/共42页
定义对象
• 在定义类之后,就可以定义这个类的对象了。
–例如,要定义一个Circle类的对象objCircle,就可以使
• 在定义一个类时,需要定义它所封装的数据
和函数
class 类名 {
数据成员; 成员函数; };
第3页/共42页
访问权限类型
• Private
–表示私有类型,它表示该类数据成员和成员函数都是类的
私有成员,只能被本类中的成员函数访问。private关键 字可以省略不写,但是要求所有的私有成员都写在类中开 始的位置。
让函数返回一个对象
第31页/共42页
this指针
第32页/共42页
this
• this在C++中是一个关键字,每次调用类的成
员函数时都会有一个this指针自动指向调用 这个函数的对象。在成员函数内部,可以使 用this指针来访问这个类的所有私有数据。
第33页/共42页
使用this指针
第34页/共42页
使用类和对象
第7页/共42页
一位数的四则运算
第8页/共42页
构造函数与析构函数
第9页/共42页
构造函数
• 所谓构造函数就是在对象创建时起作用的一
个特殊成员函数,因此通常使用构造函数来 实现类中数据的初始化。
• 构造函数从形式上看就是一个函数,但是规
定它必须与类的名字一致,并且没有返回类 型。
关于构造函数的说明
• 虽然构造函数不允许有返回值,但是它可以
带一个或多个参数。参数的写法与一般函数 的参数一样,只是在调用这个构造函数的时 候必须指明参数的值。
第13页/共42页
内联函数
第14页/共42页
内联函数
• 内联函数存的意义在并不是为了实现面向对
象程序设计,而是为了提高程序的执行效率。 –如果定义一个类的成员函数是内联函数,那么在
• 使用delete运算符销毁对象
–delete p;
第25页/共42页
使用指向对象的指针
第26页/共42页
使用指向对象的指针实现例6.6的 功能
第27页/共42页
在函数中使用对象
第28页/共42页
在函数中使用对象时构造函数与析 构函数的作用
第29页/共42页
通过引用传递对象
第30页/共42页
用下面的语句: • Circle objCircle;
–Circle是类名 –objCircle是对象名。 –类在定义完成并经过编译后系统并不会在内存中为这个类
分配空间,而是在定义了这个类的对象的时候才会为这个 对象分配内存空间。因此可以说类是一个抽象逻辑框架, 它定义了它的成员之间的关系,而对象则是类的实例,只 有对象才真正占用内存空间。
的作用域内有效,因此对静态数据成员的初始化 和函数体的定义都必须在类的外面,并且不用定 义类的对象,就可以访问静态数据成员。
第19页/共42页
使用静态数据成员
第20页/共42页
对象数组
第21页/共42页
定义对象数组
• 定义对象数组的方法与定义普通数组的方法
相似。只要定义了类,就可以定义这个类的 对象数组。
类和对象的基本概念
第1页/共42页
面向对象程序设计的特点
• 封装
–封装性是指将代码和代码所要处理的数据绑定在
一起,并采用一定的机制保证代码和数据的安全, 不受外部因素的干扰
• 多态
–指在继承的基础上允许使用同一个接口来访问一
类通用的操作
• 继承
–一个对象从其他对象中获取成员的过程
第2页/共42页
定义类
友元
第35页/共42页
友元
• 一般情况下,只有类的成员函数才可以访问
这个类的私有数据成员。
Biblioteka Baidu• 如果定义一个非成员函数为这个类的友元函
数,那么这个函数也有权利访问这个类的私 有数据成员。
第36页/共42页
定义友元函数
• 在类的内部写出函数的原型,并在函数原型
第22页/共42页
使用对象数组
第23页/共42页
指向对象的指针
• 定义指向对象指针的方法与前面讲到的定义指针的
方法相似。 –例如,如果定义了类test,它有两个公有数据成员i和j,
以及一个公有成员函数print(),那么就可以采用下面的 方法定义一个指向对象的指针p:
• test *p;
–为这个类创建了一个对象mytest
调用内联函数时,这个函数是在被调用的点进行 内联扩展,即把被调用的内联函数的代码原样不 动地复制到主调函数中,而无须进行前面提到的 所有操作,这样可以省略很多CPU时间,因此它可 以使程序的整个运行速度加快。
第15页/共42页
定义内联函数
• 第一种方法是在定义
类时把函数的函数体 写在类的里面
• 第二种方法是仍然在
类中只写成员函数的 原型,而在类的外面 定义成员函数的函数 体时在前面加上 inline关键字。
第16页/共42页
使用内联函数
第17页/共42页
静态成员
第18页/共42页
静态成员
• 静态数据成员和静态成员函数
–定义方法
• 在定义数据成员和成员函数原型时在前面加上static
关键字。
–C++认定静态成员与全局变量一样,在整个文件
• p=&mytest;
–为了能够通过p来访问mytest的成员i, j和print,需要使
用指向操作符“->”: • p->i • p->j • p->print
第24页/共42页
使用指向对象的指针来创建对象
• 使用new运算符创建对象
–test *p=new test; –或者 –test *p; –p=new test;
第10页/共42页
析构函数
• 析构函数则是构造函数的补充。析构函数是
在对象被销毁之前起作用的特殊成员函数, 通常用于做一些收尾的工作。
• 析构函数看起来也与一般成员函数一样,但
是它的函数名必须是它所属类的类名前面加 上一个~,并且同样不允许有返回值。
第11页/共42页
使用构造函数和析构函数
第12页/共42页
• Public
–表示公有类型,它表示该类数据成员和成员函数都是类的
公有成员,既可以被本类中的成员函数访问,也可以被类 之外的函数访问。因此公有成员可以作为类与外部的接口。
• Protected
–表示保护类型,它表示该类数据成员和成员函数都是类的
保护成员,这样的成员允许其他的类继承。
第4页/共42页
定义类的通式
class 类名 {
private: 私有数据成员 私有成员函数
public: 公有数据成员 公有成员函数
protected: 保护数据成员 保护成员函数
};
第5页/共42页
定义对象
• 在定义类之后,就可以定义这个类的对象了。
–例如,要定义一个Circle类的对象objCircle,就可以使
• 在定义一个类时,需要定义它所封装的数据
和函数
class 类名 {
数据成员; 成员函数; };
第3页/共42页
访问权限类型
• Private
–表示私有类型,它表示该类数据成员和成员函数都是类的
私有成员,只能被本类中的成员函数访问。private关键 字可以省略不写,但是要求所有的私有成员都写在类中开 始的位置。
让函数返回一个对象
第31页/共42页
this指针
第32页/共42页
this
• this在C++中是一个关键字,每次调用类的成
员函数时都会有一个this指针自动指向调用 这个函数的对象。在成员函数内部,可以使 用this指针来访问这个类的所有私有数据。
第33页/共42页
使用this指针
第34页/共42页