如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第11章定义C++类面向对象程序设计的特点抽象实例——钟表二、封装三、继承与派生11.2对象的生成例11.1类的应用举例优点:§11.3对象的初始化一、构造函数1.构造函数举例注:①、构造函数与类同名,定义构造函数时,不能指定返回值。②、构造函数在生成类对象时自动调用。③、new操作符自动调用生成对象的构造函数。Clock*myclock=newClock(10,25,10);这是new比malloc函数的一个重要优势。2、缺省构造函数缺省构造函数:没有参数的构造函数。缺省构造函数初始化数据成员时常赋予缺省值。注:①如果没有定义特定类的构造函数,则编译器会自动生成缺省构造函数。②如果类有缺省构造函数(用户定义或编译器生成),则可以不传递参数而定义类对象。例:Clockmyclock;不允许在类定义中初始化数据成员。下列类定义是错误的classc{private:intHour=10,Minute=20,Second=30;}4、重载构造函数5、对象成员(子对象)6、成员函数的定义7.内联成员函数#include"iostream.h"inta=0,b=0;classA{public:inta,b;voidf(intc=2,intd=3){a=c;b=d;}};voidf(intc=3,intd=4){a=c;b=d;}voidmain(){An;n.f();cout<<n.a<<''<<n.b<<endl;f();cout<<n.a<<''<<n.b<<endl;n.f(7,8);cout<<a<<''<<b<<endl;}8.对象与指针voidset(char*string){delete[]Buffer;Buffer=newchar[strlen(string)+1];strcpy(Buffer,string);}};voidmain(){CMessagem;m.set("hello");m.display();}注:(1)析构函数与类同名,前面加上~号。(2)和构造函数一样,析构函数不能定义返回类型。(3)与构造函数不同的是,析构函数不能接收参数。(4)如果类中没有定义析构函数,编译系统会自动生成缺省析构函数(空函数)。(5)析构函数不能重载。(6)一个类中只能定义一个析构函数。2、何时调用构造函数和析构函数。构造函数在对象生成时调用析构函数在对象销毁时调用特定类型对象构造函数和析构函数的调用:#include“iostream.h”//example11.8#include"string.h"voidfun();classAA{public:AA(char*str){string=newchar[strlen(str)+1];strcpy(string,str);cout<<"Constr"<<string<<endl;}~AA(){cout<<"Destru"<<string<<endl;delete[]string;}private:char*string;};调用构造函数和析构函数的顺序例:classstudent{public:student(intn,stringnam,chars){num=n;name=nam;sex=s;cout<<“Constructorcalled”<<endl;}~student(){cout<<“Destructorcalled”<<num<<endl;}voiddisplay(){cout<<“num:”<<num<<endl;cout<<“name:”<<name<<endl;cout<<“sex:”<<sex<<endl;}判断以下程序的执行结果____.#include<string.h>classA{public:A(intsma){cout<<"A"<<""<<sma<<endl;}~A(){cout<<"Des."<<endl;}};voidfn(intn){staticAsm(n);cout<<"fn"<<""<<n<<endl;}voidmain(){fn(10);fn(20);}判断以下程序的执行结果#include<iostream.h>classA{public:A(){s='\0';}A(char*p){s=p;cout<<s<<"\n";}~A(){cout<<s<<"\n";}private:char*s;};Aa1("hello");A&f(){staticAa2("Beijing");Aa3(