C++与C#第三章(续)(精品).ppt





《C++与C#第三章(续)(精品).ppt》由会员分享,可在线阅读,更多相关《C++与C#第三章(续)(精品).ppt(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1C+与C2 第三章第三章 基于对象的程序设计基于对象的程序设计(续)(续)3Student *ps1=new Student(“lisi”,3,17);delete ps1;/ps1-name并没有删除并没有删除3.6 析构函数析构函数析构函数是构造函数的互补,为生命期即将结束的类对象析构函数是构造函数的互补,为生命期即将结束的类对象自动释放资源自动释放资源。析构函数也是。析构函数也是隐式自动调用隐式自动调用的。的。注意:析构函数的名字是在类名前加上注意:析构函数的名字是在类名前加上波浪线波浪线,它不,它不返回返回任何值任何值也也没有任何参数没有任何参数。尽管我们可以为一个类定义多个构。尽管
2、我们可以为一个类定义多个构造函数,但是我们造函数,但是我们只能提供一个析构函数只能提供一个析构函数,它将被应用在类,它将被应用在类的所有对象上。的所有对象上。class Studentprivate:char*name;int age;int id;4class Studentpublic:Student(const char*str,int i,int a=18);Student();Student(const Student&other);Student();Student:Student()delete name;void main()Student st1(“lisi”,1,17);S
3、tudent *st2=new Student(“zhangsan”,2,19);delete st2;st15class Studentpublic:int getAge()return age;int setAge(int a)age=a;private:char*name;int id;int age;const Student st1(“lisi”,1,18);int age=st1.getAge();st1.setAge(20);?3.7 const成员函数成员函数只有被声明为只有被声明为const 的成员函数的成员函数才能被一个才能被一个const 类对象类对象调用,关键字调用,关
4、键字const 被放在成员函数的参数表和函数体之被放在成员函数的参数表和函数体之间间,对于在类体之外定义的,对于在类体之外定义的const 成员函数,我们必须在成员函数,我们必须在它的定义和声明中同时指定关键字它的定义和声明中同时指定关键字const6class Studentpublic:int getAge()const return age;int setAge(int a)age=a;int getId()const;private:char*name;int id;int age;int Student:getId()constreturn id;const Student st1(
5、“lisi”,1,18);int age=st1.getAge();int id=st1.getId();int setAge(int a)const age=a;把一个修改类数据成员的函数声明为把一个修改类数据成员的函数声明为const 是非法的是非法的7为了允许修改一个为了允许修改一个const对象的数据成员,可把相应的对象的数据成员,可把相应的数据成员声明为数据成员声明为mutableclass Studentpublic:int getAge()const return age;int setAge(int a)const age=a;int getId()const;private:
6、char*name;int id;mutable int age;8统计创建的所有学生对象的个数?统计创建的所有学生对象的个数?学生人数不是任何一个具体学生的属性,具有全局性学生人数不是任何一个具体学生的属性,具有全局性若用一个全局变量记录学生人数,缺点:若用一个全局变量记录学生人数,缺点:容易被误修改,不安全。容易被误修改,不安全。容易和其它全局变量重名。容易和其它全局变量重名。3.8 static成员成员9静态数据成员被当作静态数据成员被当作类的全局对象类的全局对象,对于非静态数据成员,每,对于非静态数据成员,每个类对象都有自己的拷贝,而个类对象都有自己的拷贝,而静态数据成员对每个类只有一
7、个静态数据成员对每个类只有一个拷贝拷贝,由该,由该类的所有对象共享类的所有对象共享访问。访问。student.hclass Studentpublic:Student();Student();private:char*name;int id;mutable int age;static int count;student.cpp#include“student.h”int Student:count=0;Student:Student()count+;Student:Student()count-;friend int getCount();int getCount()return Stude
8、nt:count;10class Studentpublic:static int getCount()return count;private:char*name;int id;mutable int age;static int count;int count=Student:getCount();在静态成员函数中只能访问静态成员。在静态成员函数中只能访问静态成员。11class Studentpublic:private:char*name;int id;mutable int age;static int count;static const int class=3306;只有静态整型
9、只有静态整型常量才能在头常量才能在头文件里初始化文件里初始化static const char depart20=“CSE”;123.9 操作符重载操作符重载int a,b,c;a=1;b=1;c=1;a=b=c=1;classString public:private:int _size;char*_string;String s1,s2,s3,s4;s1=s2=s3=s4=“hello”;?13重载操作符使得重载操作符使得类对象可以与操作符一起被使用类对象可以与操作符一起被使用,使得对类对象,使得对类对象的操纵与内置类型的对象一样直观。的操纵与内置类型的对象一样直观。重载的操作符在类体中被
10、声明,声明方式同普通成员函数一样,重载的操作符在类体中被声明,声明方式同普通成员函数一样,只不过它的名字包含只不过它的名字包含关键字关键字operator,以及紧随其后的一个,以及紧随其后的一个预预定义操作符:定义操作符:3.9 操作符重载操作符重载14class String public:String&operator=(const char*sobj);private:int _size;char*_string;String&String:operator=(const char*sobj)if(!sobj)_size=0;delete _string;_string=0;else _
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ C# 第三 精品

限制150内