欢迎来到天天文库
浏览记录
ID:52856905
大小:490.75 KB
页数:47页
时间:2020-03-27
《程序设计内容教程(用C、C++语言编程)第12课时 类与对象.pptx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、类与对象chapter12华中科技大学信息学院平台课——C语言程序设计目录content类的实例化——对象1类的构造函数和析构函数2new和delete3this指针4拷贝构造函数5运算符重载6类的特殊成员7对象成员8对象数组与对象指针9友元0112.1类的实例化——对象面向对象程序设计的基本单元是对象,通过对诸多同类型的对象进行抽象得到class类的声明,再使用该class类类型创建多个不同的对象,具有class类型的变量被称作该类的对象,又叫该类的实例。StudentmyStudent;例如myStudent对象的内存映像数据空间代码空间使用运算符“.”来访问对象的成员12
2、.1类的实例化——对象例Studenta,b;a.registerStudent(“Tom”,”123456”,20);b.registerStudent(“Jerry”,”123457”,20);a.show();b.show();既然所有对象共享同一个代码空间,系统是如何区分某个成员函数代码到底在处理哪个对象的数据呢?(this指针见12.4)12.2类的构造函数和析构函数构造函数:在创建对象时,编译器自动调用类的构造函数,自动地进行数据成员的初始化。析构函数:类对象退出它的作用域时,编译器会自动调用析构函数来处理善后工作。优点:1)简化对象的初始化2)减少人为失误造成的设
3、计漏洞,如:内存泄漏classStudent{private:charname[20];charid[15];intage;public:Student(constchar*n,constchar*i,inta);voidshow();};Student::Student(constchar*n,constchar*i,inta){strcpy(name,n);strcpy(id,i);age=a;}12.2.1构造函数下面为Student类定义一个构造函数Student(),用它来初始化数据成员。1)构造函数与类同名,不能为其制定任何返回类型2)当对象被创建时,构造函数被自动
4、调用。intmain(){StudentmyStudent(“Tom”,“123456”,20);//创建Student类的对象myStudentreturn0;}12.2.2重载构造函数和缺省构造函数例classmyClass{private:inta,b;public:myClass();myClass(inti,intj);voidshow();};myClass::myClass(){cout<<“执行myClass()”<5、l;a=i,b=j;}intmain(){myClassob1;myClassob2(10,5);return0;}当执行语句myClassob1时,调用第一种不带参数的缺省构造函数,而当执行语句myClassob2(10,5)时,调用第二种带2个整型参数的重载构造函数12.2.2重载构造函数和缺省构造函数几点说明:(1)定义对象ob1时语句为myClassob1;不能写成:myClassob1();(2)当我们没有为Student类定义任何构造函数时,编译器会自动为该类创建一个不带参数的构造函数,即缺省构造函数。且只能这样定义该类的对象:StudentmyStudent;(36、)强烈建议让每个类都拥有一个不带参数的构造函数,即使这个构造函数为空。这样在使用对象数组和创建派生类对象时不会发生不必要的麻烦。(4)如果一个构造函数的所有参数均带有缺省值,那么这个构造函数本质上和缺省构造函数有等同的作用,原因在于调用它时可以不必传递任何参数。此时当然还可以再定义不带参数的构造函数了,但是如果在创建对象时采用了不传递任何参数的方式,因为会产生歧义,编译器将无法确定是调用定义了缺省值的构造函数,还是调用不带任何参数的构造函数,此时编译器将提示出错12.2.3析构函数每当撤销一个对象时,析构函数就会自动调用。撤销对象分为两种场景:对象在离开其作用域时,以及用new7、运算符创建的动态对象在使用delete运算符操作时。例如classmyClass{private:inta,b;public:myClass();~myClass();…};…myClass:~myClass(){cout<<“执行析构函数”<
5、l;a=i,b=j;}intmain(){myClassob1;myClassob2(10,5);return0;}当执行语句myClassob1时,调用第一种不带参数的缺省构造函数,而当执行语句myClassob2(10,5)时,调用第二种带2个整型参数的重载构造函数12.2.2重载构造函数和缺省构造函数几点说明:(1)定义对象ob1时语句为myClassob1;不能写成:myClassob1();(2)当我们没有为Student类定义任何构造函数时,编译器会自动为该类创建一个不带参数的构造函数,即缺省构造函数。且只能这样定义该类的对象:StudentmyStudent;(3
6、)强烈建议让每个类都拥有一个不带参数的构造函数,即使这个构造函数为空。这样在使用对象数组和创建派生类对象时不会发生不必要的麻烦。(4)如果一个构造函数的所有参数均带有缺省值,那么这个构造函数本质上和缺省构造函数有等同的作用,原因在于调用它时可以不必传递任何参数。此时当然还可以再定义不带参数的构造函数了,但是如果在创建对象时采用了不传递任何参数的方式,因为会产生歧义,编译器将无法确定是调用定义了缺省值的构造函数,还是调用不带任何参数的构造函数,此时编译器将提示出错12.2.3析构函数每当撤销一个对象时,析构函数就会自动调用。撤销对象分为两种场景:对象在离开其作用域时,以及用new
7、运算符创建的动态对象在使用delete运算符操作时。例如classmyClass{private:inta,b;public:myClass();~myClass();…};…myClass:~myClass(){cout<<“执行析构函数”<
此文档下载收益归作者所有