《C++程序设计》课程教学课件(PPT讲稿)第9章 类和对象的进一步讨论

第9章关于类和对象的进一步讨论 91构造函数 9.2析构函数 9.3调用构造函数和析构函数的顺序 9.4对象数组 9.5对象指针 9.6共用数据的保护 9.7对象的动态建立和释放 9.8对象的赋值和复制 9.9静态成员 910友元 9.11类模板
第9章 关于类和对象的进一步讨论 9.1 构造函数 9.2 析构函数 9.3 调用构造函数和析构函数的顺序 9.4 对象数组 9.5 对象指针 9.6 共用数据的保护 9.7 对象的动态建立和释放 9.8 对象的赋值和复制 9.9 静态成员 9.10 友元 9.11 类模板

9.1构造函数 9.1.1对象的初始化 类的数据成员是不能在声明类时初始化 怎样对类的数 据成员进行初 始化?
9.1 构造函数 9.1.1 对象的初始化 类的数据成员是不能在声明类时初始化 怎样对类的数 据成员进行初 始化?

类中所有的成员都是公用的,则可以在定义对象时对数 据成员进行初始化 class Time public:. 如果数据成员是私有的,或者 hour; 类中有private或protected的成员, minute; 就不能用这种方法初始化 sec; 为 Time t1={14,56,30}; 和结构体变量的初始化是差不多 的,在一个花括号内顺序列出各 公用数据成员的值,两个值之间 用逗号分隔
类中所有的成员都是公用的,则可以在定义对象时对数 据成员进行初始化 class Time {public: hour; minute; sec; }; Time t1={14,56,30}; 和结构体变量的初始化是差不多 的,在一个花括号内顺序列出各 公用数据成员的值,两个值之间 用逗号分隔 如果数据成员是私有的,或者 类中有private或protected的成员, 就不能用这种方法初始化

例8.3将例8.2的程序 int main()) 调用set time函数来 改用含成员函数的类 Time t1; 为数据成员赋值 来处理。 t1.set time()月 个类定义了多 #include t1.show time(); 个对象,而且类 using namespace std; Time t2; 中的数据成员比 class Time t2.set time(); 较多,那么,程 public: t2.show time(); 序就显得非常臃 void set_time(); return 0; 肿烦琐。 void show time(); 侧1但 private: void Time:set time() int hour; cin>>hour;cin>>minute; int minute; cin>>sec; int sec; void Time:show time() cout<<hour<<":"<<minute<<":"< 运行情况与程序(a)相同 sec<<endl;
例8.3 将例8.2的程序 改用含成员函数的类 来处理。 #include using namespace std; class Time {public: void set_time( ); void show_time( ); private: int hour; int minute; int sec; }; int main( ) {Time t1; t1.set_time( ); t1.show_time( ); Time t2; t2.set_time( ); t2.show_time( ); return 0; } 运行情况与程序(a)相同 void Time∷set_time( ) { cin>>hour; cin>>minute; cin>>sec; } void Time∷show_time( ) { cout<<hour<<″:″<<minute<<″:″<< sec<<endl; } 用成员函数来对对 象中的数据成员赋 初值 调用set_time函数来 为数据成员赋值 一个类定义了多 个对象,而且类 中的数据成员比 较多,那么,程 序就显得非常臃 肿烦琐

9.1.2构造函数的作用 C++提供了构造函数(constructor)来处理对象的初始化 构造函数是一种特殊的成员函数 不需要用户来调用它 在建立对象时自动执行 特点 构造函数的名字必须与类名同 名不能由用户任意命名 不具有任何类型,不返回任何值 功能是由用户定义的, 用户根据初始化的要 求设计函数体和函数 参数
9.1.2 构造函数的作用 C++提供了构造函数(constructor)来处理对象的初始化 构造函数是一种特殊的成员函数 不需要用户来调用它 在建立对象时自动执行 构造函数的名字必须与类名同 名不能由用户任意命名 不具有任何类型,不返回任何值 功能是由用户定义的, 用户根据初始化的要 求设计函数体和函数 参数 特 点

a1在例??其神上定)构造成员函数 #include using namespace std; void Time:set time() class Time cin>>hour; public: 定义构造函 给成员变 cin>>minute; Time() 数,函数名 量赋值 与类名相同 cin>>sec; (hour-0; minute-0; sec-0; 数据成员 赋初值 void Time:show time() void set time(); cout<<hour<<""<<minute<<" void show time() rivate: "<<sec<<endl; int hour; /私有数据成员 int minute; int sec;
例9.1 在例8.3基础上定义构造成员函数 #include using namespace std; class Time {public: Time( ) {hour=0; minute=0; sec=0; } void set_time( ); void show_time( ); private: int hour; //私有数据成员 int minute; int sec; }; 定义构造函 数,函数名 与类名相同 数据成员 赋初值 void Time∷set_time( ) {cin>>hour; cin>>minute; cin>>sec; } void Time∷show_time( ) { cout<<hour<<″:″<<minute<<″ :″<<sec<<endl; } 给成员变 量赋值

建立对象t1,同时调用构 int main( 造函数t1.Time() Time t1; t1.set time() t1.show_time(); 虞 Time t2;- 建立对象1,同时调用构 造函数tl.Time() t2.show time() return 0; 程序运行的情况为: 102554 (从键盘输入新值赋给t1的数据成员) 10:25:54 (输出t1的时、分、秒值) 0:0:0 〔输出t2的时、分、秒值)
int main( ) {Time t1; t1.set_time( ); t1.show_time( ); Time t2; t2.show_time( ); return 0; } 建立对象t1,同时调用构 造函数t1.Time( ) 建立对象t1,同时调用构 造函数t1.Time( ) 程序运行的情况为: 10 25 54↙ (从键盘输入新值赋给t1的数据成员) 10:25:54 (输出t1的时、分、秒值) 0:0:0 (输出t2的时、分、秒值)

在类内对构造函数进行声明而在类外定义构造函数 Time(); 对构造函数在类内进行声明 在类外定义构造函数: Time:Time() hour-0; 得 minute-0; 在类外定义构造成员函 sec-0; 数,要加上类名Time 和域限定符“:
在类内对构造函数进行声明而在类外定义构造函数 Time( ); Time∷Time( ) {hour=0; minute=0; sec=0; } 在类外定义构造函数: 对构造函数在类内进行声明 在类外定义构造成员函 数,要加上类名Time 和域限定符“∷

int main() (1)在类对象进入其作用时调用构造函数 Time t1; t1.set time() (3)构造函数不需用户调用, 也不能被用户调用 t1.show time(); Time t2; (⑤)如果用户自己没有定义构造函数, t2.show_time(); 则C++会自动生成一个构造函数,只 return 0; 是这个构造函数的函数体是空的,也 没有参数,不执行初始化操作。 (2)与一般函数的一个重要的不同之点 Time:Time() 是没有返回值,因此也不需要在定义 hour-0; 构造函数时声明类型 minute-0; (4)在构造函数体中不仅可对数据成员 sec=0; 赋初值,而且可包含其他语句。但是 般不提倡在构造函数中加入与初始 化无关的内容,以保持程序的清晰
int main( ) {Time t1; t1.set_time( ); t1.show_time( ); Time t2; t2.show_time( ); return 0; } Time∷Time( ) {hour=0; minute=0; sec=0; } (1) 在类对象进入其作用时调用构造函数 (2) 与一般函数的一个重要的不同之点 是没有返回值,因此也不需要在定义 构造函数时声明类型 (3) 构造函数不需用户调用, 也不能被用户调用 (4) 在构造函数体中不仅可对数据成员 赋初值,而且可包含其他语句。但是 一般不提倡在构造函数中加入与初始 化无关的内容,以保持程序的清晰。 (5) 如果用户自己没有定义构造函数, 则C++会自动生成一个构造函数,只 是这个构造函数的函数体是空的,也 没有参数,不执行初始化操作

9.1.3带参数的构造函数 用户希望对不同的对象赋予不同的初值时可以采用 带参数的构造函数 构造函数首部的一般格式为: 构造函数名(类型1形参1,类型2形参2,.) 用户是不能调用构造函数的,因此无法采用常规的调用 函数的方法给出实参。 实参是在定义对象时给出的 定义对象的一般格式为: 类名对象名(实参1,实参2,);
类名 对象名(实参1,实参2,.); 9.1.3 带参数的构造函数 用户是不能调用构造函数的,因此无法采用常规的调用 函数的方法给出实参。 用户希望对不同的对象赋予不同的初值时可以采用 带参数的构造函数 构造函数首部的一般格式为: 构造函数名(类型 1 形参1,类型2 形参2,.) 实参是在定义对象时给出的 定义对象的一般格式为:
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《C++程序设计》课程教学课件(PPT讲稿)第13章 输入输出流.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第12章 多态性与虚函数.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第11章 类的继承.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第10章 运算符重载.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第6章 指针(2/2).ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第6章 指针(1/2).ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第5章 二维数组.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第5章 一维数组.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第4章 函数与预处理(2/2).ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第4章 函数与预处理(1/2).ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第3章 循环结构.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第3章 选择结构.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第3章 程序设计初步.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第2章 数据类型与表达式.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第1章 C++的初步知识.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)总结.ppt
- 《网络安全基础》课程教学资源(书籍文献)Bulletproof SSL and TLS,Ivan Ristić,Understanding and Deploying SSL/TLS and PKI to Secure Servers and Web Applications.pdf
- 新疆大学:《网络安全基础》课程教学资源(实验指导)实验8 系统安全.doc
- 新疆大学:《网络安全基础》课程教学资源(习题解答)用户认证.pdf
- 新疆大学:《网络安全基础》课程教学资源(实验指导)实验7 网络安全架构(IP安全).doc
- 《动画设计与制作》课程教学课件(PPT讲稿)产品广告(实训).ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)创建运动的水面(实训).ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)动力.ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)粒子系统.ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)轨迹控制器(曲线编辑器).ppt
- 《动画设计与制作》课程教学资源(授课教案)3DSMAX2008讲义(1/7).doc
- 《动画设计与制作》课程教学资源(授课教案)3DSMAX2008讲义(2/7).doc
- 《动画设计与制作》课程教学资源(授课教案)3DSMAX2008讲义(3/7).doc
- 《动画设计与制作》课程教学资源(授课教案)3DSMAX2008讲义(4/7).doc
- 《动画设计与制作》课程教学资源(授课教案)3DSMAX2008讲义(5/7).doc
- 《动画设计与制作》课程教学资源(授课教案)3DSMAX2008讲义(6/7).doc
- 《动画设计与制作》课程教学资源(授课教案)3DSMAX2008讲义(7/7).doc
- 《动画设计与制作》课程教学课件(PPT讲稿)骨骼蒙皮动画2009A.ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)骨骼蒙皮动画2009B2.ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)第01章 3ds max基础知识.ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)第02章 建模.ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)第03章 空间位相变换.ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)第04章 3DS MAX修改命令面板.ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)第05章 二维图形转为三维.ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)第06章 三维物体修改命令.ppt