武汉微普C++-02

上传人:油条 文档编号:47831618 上传时间:2018-07-05 格式:PPT 页数:32 大小:1.38MB
返回 下载 相关 举报
武汉微普C++-02_第1页
第1页 / 共32页
武汉微普C++-02_第2页
第2页 / 共32页
武汉微普C++-02_第3页
第3页 / 共32页
武汉微普C++-02_第4页
第4页 / 共32页
武汉微普C++-02_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《武汉微普C++-02》由会员分享,可在线阅读,更多相关《武汉微普C++-02(32页珍藏版)》请在金锄头文库上搜索。

1、OOP进阶公司地址:武汉东湖开发区SBI光谷创业街10栋A座12楼 交流QQ:27511603 联系电话:87171191/87171192内容导航static拷贝构造函数string类继承多态公司地址:武汉东湖开发区SBI光谷创业街10栋A座12楼 交流QQ:27511603 联系电话:87171191/87171192OOP引用和常引用静态成员拷贝构造函数(浅拷贝 VS 深拷贝)string类继承性以及继承访问特性多态性(覆盖、虚函数、纯虚函数、抽象类)对象的内存图解公司地址:武汉东湖开发区SBI光谷创业街10栋A座12楼 交流QQ:27511603 联系电话:87171191/87171

2、192引用:给旧变量起新名字,是一个变量的别 名,可以通过新名字操作旧变量,引用和用 来初始化它的变量是同一个实体。引用的声明 int iVal; int 引用的使用 声明的时候就必须初始化 引用不能重新赋值(不能重新绑定为另一个新对象 的别名)引用公司地址:武汉东湖开发区SBI光谷创业街10栋A座12楼 交流QQ:27511603 联系电话:87171191/87171192尽量使用引用来传递参数尽量使用const来保护引用尽量使用引用来代替指针危险的引用方法 返回一个局部变量的引用引用的使用公司地址:武汉东湖开发区SBI光谷创业街10栋A座12楼 交流QQ:27511603 联系电话:87

3、171191/87171192静态数据成员所有的同一类对象都使用一份数据.静态数据成员又称为类变量. 它属于这个类,被该类的全体对象共享类变量的初始化class Counter static int cnt; ;公司地址:武汉东湖开发区SBI光谷创业街10栋A座12楼 交流QQ:27511603 联系电话:87171191/87171192公共的静态成员函数就是一个全局函数.对公共的静态函数可以直接调用,不需要通过任 何对象.静态成员函数中不得使用非静态数据成员.允许但是不提倡用对象.成员来访问静态成员。静态成员函数公司地址:武汉东湖开发区SBI光谷创业街10栋A座12楼 交流QQ:27511

4、603 联系电话:87171191/87171192拷贝构造函数拷贝构造函数:除了有个特殊的名字之外,它 毫无特别之处. A(const A A a2(a1); / 调用拷贝构造函数 A a3 = a1; / 调用拷贝构造函数 f( a1 ); / 调用拷贝构造函数 A a4 = g(); /调用拷贝构造函数, 为被返回的 对象建立一个临时对象公司地址:武汉东湖开发区SBI光谷创业街10栋A座12楼 交流QQ:27511603 联系电话:87171191/87171192拷贝构造函数默认拷贝构造函数在有指针成员指向动态内存 时会有问题,两个指针指向同一地方,导致混 乱。注意:创建对象的实参只是

5、传到构造器的形参 ,没有传到成员变量。自己定义拷贝构造函数后,就没有默认拷贝构 造函数了,要在自己定义的拷贝构造函数中处 理所有需要处理的数据。浅拷贝 使用默认拷贝构造函数深拷贝 就是自己写拷贝构造函数公司地址:武汉东湖开发区SBI光谷创业街10栋A座12楼 交流QQ:27511603 联系电话:87171191/87171192stringC+标准库中提供了string类来操作字符串。string str(“hello wepull“);for(string:size_type ix= 0;ix!=str.size();+ix)coutstrixendl;string line;while(

6、getline(cin,line)if(line=“quit“)break;coutlineendl;公司地址:武汉东湖开发区SBI光谷创业街10栋A座12楼 交流QQ:27511603 联系电话:87171191/87171192length() VS size() C+标准库中的string中两者的源代码如下: size_type _CLR_OR_THIS_CALL length() const / return length of sequence return (_Mysize); size_type _CLR_OR_THIS_CALL size() const / return le

7、ngth of sequence return (_Mysize); 所以两者没有区别。 公司地址:武汉东湖开发区SBI光谷创业街10栋A座12楼 交流QQ:27511603 联系电话:87171191/87171192length() VS size()length是因为沿用C语言的习惯而保留下来的, string类最初只有length,引入STL之后,为了 兼容又加入了size,它是作为STL容器的属性存 在的,便于符合STL的接口规则,以便用于STL 的算法。string类的size()/length()方法返回的是字节数 ,不管是否有汉字。公司地址:武汉东湖开发区SBI光谷创业街10栋

8、A座12楼 交流QQ:27511603 联系电话:87171191/87171192内存泄露for (int i = 0; i 10; +i) int *p = new int20;cout“p=“pendl;/delete p;公司地址:武汉东湖开发区SBI光谷创业街10栋A座12楼 交流QQ:27511603 联系电话:87171191/87171192生活中的继承 2-1生活中,继承的例子随处可见动物食草动物食肉动物谁是父类? 谁是子类? 能说出继承的特点吗?继承需要符合的关系:is a kind of,父类更通用、子类更具体公司地址:武汉东湖开发区SBI光谷创业街10栋A座12楼 交流

9、QQ:27511603 联系电话:87171191/87171192生活中的继承 2-2子类具有父类的一般特性(包括属性和行为) ,以及自身特殊的特性巴士是汽车吗? 卡车是汽车吗? 出租车是汽车吗?最大载客数量报站引擎数量 外观颜色 刹车 加速汽车最大载重量卸货所属公司 最大载客数量 打发票属性行为请问:出租车 包含哪些属性 和行为呢?公司地址:武汉东湖开发区SBI光谷创业街10栋A座12楼 交流QQ:27511603 联系电话:87171191/87171192为什么需要继承 4-1开发Wepull讲师类,其中讲师分为Java讲师以 及C+讲师,各自的要求如下: Java讲师 属性:姓名、所

10、属区域 行为:授课(步骤:打开MyEclipse、实施理论课授课)、自我介 绍 C+讲师 属性:姓名、所属区域 行为:授课(步骤:打开Visual Studio 、实施理论课授课)、自 我介绍公司地址:武汉东湖开发区SBI光谷创业街10栋A座12楼 交流QQ:27511603 联系电话:87171191/87171192请问:以下这个解决方案中存在着什么问题?为什么需要继承 4-2class WepullJavaTeacher private: string name; / 讲师姓名 string area; / 所在区域 public:WepullJavaTeacher(string myN

11、ame, string myArea) name = myName; area = myArea; void giveLesson() cout“启动 Visual Studio“endl; cout“知识点讲解“endl; cout“总结提问“endl; void introduction() cout“大家好!我是“ area “的“ name endl; ;class WepullC+Teacher private: string name; / 讲师姓名 string area; / 所在区域 public:WepullC+Teacher(string myName, string m

12、yArea) name = myName; area = myArea; void giveLesson() cout“启动 MyEclipse“endl; cout“知识点讲解“endl; cout“总结提问“endl; void introduction() cout“大家好!我是“ area “的 “ name endl; ;代码存在重复,违背了“write once, only once”的原则 公司地址:武汉东湖开发区SBI光谷创业街10栋A座12楼 交流QQ:27511603 联系电话:87171191/87171192为什么需要继承 4-3如何改进?有没有可能建立继承关系,让子类

13、自 动继承父类的属性和方法? Java讲师是讲师吗? C+讲师是讲师吗?class WepullTeacher private:string name; / 讲师姓名 string area; / 所在区域 public:WepullTeacher(string myName,string myArea) name = myName; area = myArea; void giveLesson() cout“知识点讲解“endl; cout“总结提问“endl; void introduction() cout“大家好!我是“ area “的“ name endl; 现在,所有子类中相同的代

14、码 都抽取到父类中了 属 性 行 为姓名 所在区域 授课 自我介绍讲师Java讲师C+讲师公司地址:武汉东湖开发区SBI光谷创业街10栋A座12楼 交流QQ:27511603 联系电话:87171191/87171192为什么需要继承 4-4class WepullJavaTeacher2 :public WepullTeacher public :WepullJavaTeacher2(string myName, string myArea) : WepullTeacher(myName,myArea) void giveLesson() cout“启动 MyEclipse“endl; We

15、pullTeacher:giveLesson(); class WepullC+Teacher2 :public WepullTeacher public WepullC+Teacher2(string myName, string myArea) : WepullTeacher(myName,myArea) void giveLesson() cout“启动 Visual Studio“endl; WepullTeacher:giveLesson(); 使用继承,可以有效实现代码复用子类自动继承父类的属性 和方法,子类中不再存在 重复代码公司地址:武汉东湖开发区SBI光谷创业街10栋A座12楼 交流QQ:27511603 联系电话:87171191/87171192小结 1请编码实现动物世界的继承关系: 动物(Animal)具有行

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号