淘豆网
下载此文档放大查看缩小查看   1/25
下载文档 文档分类:IT计算机 > C/C++资料

c++课件 第七章 类与数据抽象(二).ppt

下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表
下载前请先预览,预览内容跟原文是一样的,在线预览图片经过高度压缩,下载原文更清晰。
0/100
您的浏览器不支持进度条


播放器加载中,请稍候...
更多>>该用户其他文档
下载所得到的文件列表
c++课件 第七章 类与数据抽象(二).ppt
文档介绍:
第七章类与数据抽象(二) 7.1 const 对象与 const 成员函数 7.2 复合-对象作为类成员 7.3 友元函数与友元类 7.4 this 指针与动态内存分配 7.5 static 类成员 7.6 代理类 7.1 const 对象与 const 成员函数 1、引入我们知道最低权限原则是良好软件工程的最基本原则之一。同时在第五章学过 const 的用法;既然 const 可以修饰内部数据类型,那么由类事例化的对象,在不需要修改时是否也可以声明为 const?; 已有 Time 类,现在事例化一个对象; const Time noon(12, 0, 0 );// 声明 noon 对象为 const //并初始化为中午 12时 2、使用如何使用 const 对象呢? C++ 编译器不允许任何成员函数调用 const 对象,除非该成员函数本身也声明为 const 。 const 成员函数:在函数参数表和函数定义的左花括号之间插入 const 关键字;如: int Time::getValue () const { return privateDataMember ;} 注意: A、 const 成员函数不能修改对象; B、 const 对象不能调用非 const 成员函数(无 const 的成员函数); C、特殊:构造/析构函数都修改对象(初始化对象/清理),但是声明它们为 const 是语法错误;同时 const 对象可以调用它们;另外 const 对象的构造函数中可以调用非 const 成员函数; 3、实验 P307-7.1 (对比 const 对象/非 const 对象如何调用成员函数) 总结实验:对象成员函数 right/error const non-const ( 非构造/析构函数) error const const right non-const non-const right non-const const right 4、如果数据成员为 const ,则如何进行初始化? 是否可以在构造函数中直接赋值? 必须利用成员初始化值进行初始化! 如: class A { public: A(int x=0, int y=0); private: int xx; const intyy; }; A:A( int x, inty) :yy(y ){ xx=0; } 注意: A、 If有多个 const 数据成员需要初始化,则可以放在冒号后面以逗号分隔的列表中。如: A::A ( int x, int y): yy(y ), yyy(y ){…} B、所有声明时需要初始化的变量(如:带 const 、引用、以及第 9章中的派生类的基类部分),都需要用此方式初始化;对 const 对象进行处理---第21章介绍 mutable ; 5、实验 P309-7.2 、7.37.2 复合-对象作为类成员 1、引入类可以把其他类对象作为自己的成员称为复合; 比如: AlarmClock 类的对象需要知道何时响铃,故可将一个 Time 对象作为类成员。 2、使用生成对象时,自动调用其构造函数,因此要指定参数如何传递给成员对象的构造函数;且成员对象按声明的顺序,在所在类对象(宿主对象)之前建立。例如: P313-7.4- 中 Employee 类包含 private 数据成员 firstName 、 lastName 、 birthDay 和 hireDate 。 birthDay 和 hireDate 是 Date 类的 const 类型的对象;而 Date 包含 private 数据成员 month 、 day 和 year 。程序实例化一个 Employee 对象,并初始化;则 Employee 的构造函数为: Employee::Employee(char * fname , char * lname , int bmonth , int bday , int byear , int hmonth , int hday , int hyear ): birthDate(bmonth , bday , byear ), hireDate(hmonth , hday , hyear ) 通过成员初始化值,将参数传递给成员对象的构造函数。 3、实验 P313-7.4- ( 10 minutes ) 注意: A、 Employee 中成员对象的声明顺序与构造函数中的顺序; B、设置断点演示对象的构造顺序和删除顺序;看是否是“由内向外建,由外向内删”; C、 If 成员对象没有通过成员数始化值显式初始化;则隐式调用其默认构造函数(其值可以用 set 函数重定义);建议采用由成员初始化显式初始化成员对象(消除两次初始化成员对象的开销); D、注意第 43行调用 Date 成员函数 print —无参数, but 每个成员函数包含所操作对象的隐式句柄(指针形式—后面介绍的 this 指针); 7.3 友元函数与友元类 1、引入有时候,普通函数需要直接访问一个类的保护或私有数据成员。 If没有友元机制,则只能将类的数据成员声明为公共的,从而任何函数都可以无约束地访问它。而普通函数需要直接访问类的保护或私有数据成员的原因主要是为提高效率。需要友元还有一个原因是为了方便重载操作符的使用。友元提供了在不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制;通过友元,一个普通函数或另一个类中的成员函数可以访问类中的私有成员和保护成员。友元的正确使用能提高程序的运行效率,但破坏了类的封装性和数据的隐蔽性。
1
内容来自淘豆网www.taodocs.com转载请标明出处.
更多>>相关文档
文档信息
最新下载
文档标签