构造函数和析构函数总论

上传人:豆浆 文档编号:47396266 上传时间:2018-07-01 格式:PPT 页数:43 大小:734KB
返回 下载 相关 举报
构造函数和析构函数总论_第1页
第1页 / 共43页
构造函数和析构函数总论_第2页
第2页 / 共43页
构造函数和析构函数总论_第3页
第3页 / 共43页
构造函数和析构函数总论_第4页
第4页 / 共43页
构造函数和析构函数总论_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《构造函数和析构函数总论》由会员分享,可在线阅读,更多相关《构造函数和析构函数总论(43页珍藏版)》请在金锄头文库上搜索。

1、构造函数和析构函数总论构造函数和析构函数总论在类中可以定义两个指定功能成员函数:构造函数析构函数 一、 构造函数用来生成对象,可以初始化对象的数据成 员,构造函数在有对象生成时有系统自动调用 。class crectangle private :int left ; int right ;public :crectangle( int L, int R) /构造函数left=L;right=R ;void getcoord ( int *L , int *R )*L=left ;*R = right ;void main ( ) int left ;int right ;crectangle

2、rect(25, 100)rect.getcoord( cout class Rpublic:R(int rl ,int r2)Rl=rl;R2=r2;void print();void print( )const;private:int R1,R2; void R:print ( ) cout class A public: A(int i); void print(); const int private: const int a; static const int b; ; const int A:b=10;A:A(int i):a(i),r(a) void A:print( ) cou

3、tNCTest(int i)N=x;; void main ( ) CTest Test1(1) ;Ctest Test2(2) ;coutTest1.GetN( )endl;coutTest2.GetN( )endl; this指针是隐含在成员函数 体中的指针,它指向调用该 成员函数的对象。说明:this指针是指向本对象的指针 ,包含在成员函数内,成员函数中访问 的数据成员是指,本对象的数据成员。注:由于静态成员函数不属于某个 对象,所以没有包含对象地址的this指针 。因此,如果要直接访问非静态数据成 员,则编译器无法确定该数据成员属于 哪个对象。友元友元1、可以声明某个函数为该类的友元,

4、一旦 函数声明为该类的友元,友元函数可以访 问类中的私有成员。 2、可以声明一个类是另一个类的友元类, 友元类可以访问该类中的私有成员。注:友元提高了程序的运行效率,但破坏了封装性。#include“iostream.h“ #include“math.h“ class squar public: squar(double xx,double yy)x=xx;y=yy; void Getxy(); friend double area(squar private: double x,y; void squar:Getxy() cout“length:“x“,wide:“yendl; double

5、 area(squar /引用private成员 void main() squar p(3.0,4.0); p.Getxy(); double d=area(p); cout“The area is“dendl;一、友元函数 声明函数时前面加friend的函数就 是友元函数,友元函数是在类外定义的 函数,在友元函数中可以引用类中的 private成员。二、友元类 在类中声明另一个类为该类的友元类 ,声明前加friend 。在友元类中可以引用该类中的 private成员。 p123 11.18#include“iostream.h“ class X friend Y;public:void S

6、et(int i)x=i;void Display()cout“x=“x“y=“yendl;private:int x;stastic int y; class Ypublic: Y(int i,int j); void Display();private: X a; int X:y=1;Y:Y(int i,int j) a.x=i; /访问X对象中的私有成员 X:y=j; void Y:Display() cout“x=“a.x“,“; cout“y=“X:yendl; void main() X b; b.Set(2); b.Display(); Y c(6,9); c.Display()

7、; b.Display(); 11.8 11.8 类的作用域:局部类类的作用域:局部类 、嵌套类、嵌套类一、类的作用域 类域:类的作用域,它是指在类的定义中 由一对花括号所括起来的部份。 注:类域中定义的变量不能使用auto, register, extern修饰符。只能用static修 饰符,定义的函数也不能用extern.二、局部类和嵌套类 1、局部类: 在函数体内定义的类为局部类。 Void fun ( ) class A 注:局部类中不能说明静态成员函数,并且所有 成员函数都必须定义在函数体内,很少用。2、嵌套类 class A public :class B private :三三.

8、 .对象的生存期对象的生存期1、局部对象: 该对象所在函数块进入时,该对象被创建。 该对象所在函数块退出时,该对象被释放。2、静态对象: 程序第一次执行到所定义的对象时,该对象被创建。 程序结束退出时,该对象被释放。3、全局对象; 程序开始时,创建该对象。 程序结束时,释放该对象。 11.9 11.9 对象指针和对象引用对象指针和对象引用一、成员的指针,对象的指针,对象的引用成员的指针 指向数据成员的指针指向成员函数的指针定义一个指向类A中数据成员C的指针方法如下:int A: *pc=定义一个指向类A中成员函数fun(int)的指针方法如下:int (A: *pfun)(int)=A:fun

9、;对象的指针及对象的引用可直接用类名定义,如:A *p= A 例:11.19 # include iostreamh class A public :A ( int i ) a=i;int fun(int b) return a *c+b ; int c ;private:int a ;void main ( ) A x(8) ;int A: *PC ; /定义一个指向数据成员的指针PC = /指向成员C,相当于int A: *PC = x.*PC = 3; /用成员指针给成员赋初值, 相当于xc = 3 int ( A: *pfun ) ( int ) ; /定义一个指向成员函数的指针 Pf

10、un =A: fun ; A *P = /定义一个指向对象x的指针cout (P * pfun ) (5) end ; /用对象指针引用成员函数指针调用函数,实参5 注:P对象指针 、 x为对象,P指向x 引用数据成员可以有下面几种形式:P为指向对象x的指针P C; x.C; 对成员函数的调用可以有下面几种形式(pfun为指向成员函数 fun的指针)P fun (5); x.fun (5); A private :; DATE date 2= DATE (7,22,1998 ),DATE( 7,23,1998 ) ; 或: DATE date 2 ;date0= DATE ( 7,22,199

11、8 );date1= DATE ( 7,23,1998 );注: 数组生成时,编译器调用数组中每个元 素的构造函数或缺省构造函数,数组销毁时, 编译器调用每个元素的析构函数。 注:如果该类没有缺省构造函数,则会产生错误 。(2)数组元素赋初值时,date0= DATE ( 7,22,1998 );会有一个临时的对象产生,调用构造函数, 初始化临时对象,之后将临时对象的值赋给 date0,然后调用析构函数,释放掉临时对象 。(3) 用new生成的数组不能初始化(动态数组)。DATE *date = new DATE 2 ;销毁时要加上。Delete date ;如果省略了,则编译器只对第一个数

12、组元素调用析构函数。P126 11.21二、对象数组行指针和指针数组 1、行指针class M ;void main ( ) M m 24M (* pm )4= m ; /pm为行指针(*( pm + i )+ j)为mij二、指针数组 M m1( 7,8 ), m2, m3( 5,7 ) ; M *n 3= p182 6.9作业: 1.生成一个rectangle类,这个类的length和 width默认为1,其成员函数计算长方形的 perimeter(周长)和area(面积)。为该类的 length和width设置setcoord()和 getcoord()函数。setcoord()函数应验

13、证 length和width均为0.0到20.0之间的浮点 数。 2.生成一个savingsaccount类。用static数 据成员包含每个存款人的Annual(年利 率),类成员包含一个private数据成员 savings,表示当前存款额一个成员函数calculate(),计算月利息,用 savings乘以Annual除以12得到,并将这 个月利息加进savings,用static成员函数 modify(),将Annual设置为新值。实例化 两个不同savingsaccount对象saver1和 saver2,结余分别为2000.00和3000.00, 将Annual设置为3%,计算每个存款人的 月息并打印新的结果,再将Annual设置为 4%,计算每个存款人的月息并打印新的结 果。

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

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

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