类例题.docx
- 文档编号:25051141
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:41
- 大小:21.68KB
类例题.docx
《类例题.docx》由会员分享,可在线阅读,更多相关《类例题.docx(41页珍藏版)》请在冰豆网上搜索。
类例题
第7章类与对象
【例7-1】类的定义举例。
//student.h
classStudent//定义Student类
{
public:
//外部接口
voidGetinfo(char*pname,char*pid,charSex,inta,doubles);
voidmodify(floats);
voiddisplay();
private:
char*name;
char*id;
charsex;
intage;
doublescore;
};//类定义必须以分号结束
【例7-2】访问权限控制举例。
//Rectangle.h
classRectangle
{
public:
//公有成员函数,外部接口
voidGetData(doublea,doubleb);
voidGetLength();
voidGetWidth();
voidCalculateArea();
voidDisplay();
private:
//私有数据成员,外部不可见
doublewidth;
doublelength;
doublearea;
};
【例7-3】成员函数的类外实现。
//Point.h
classPoint
{
public:
voidInitPoint(floatPointA_x=0,floatPointA_y=0);
voidMove(floatNew_x,floatNew_y);
floatGetPointx();
floatGetPointy();
private:
floatP1_x,P1_y;
};
//成员函数的类外实现
//point.cpp
voidPoint:
:
InitPoint(floatPointA_x,floatPointA_y)
{
P1_x=PointA_x;
P1_y=PointA_y;
}
voidPoint:
:
Move(floatNew_x,floatNew_y)
{
P1_x+=New_x;
P1_y+=New_y;
}
floatPoint:
:
GetPointx()
{
returnP1_x;
}
floatPoint:
:
GetPointy()
{
returnP1_y;
}
【例7-4】成员函数在类中实现。
//Point.h
classPoint
{
public:
voidInitPoint(floatPointA_x=0,floatPointA_y=0)
{
P1_x=PointA_x;
P1_y=PointA_y;
}
voidMove(floatNew_x,floatNew_y)
{
P1_x+=New_x;
P1_y+=New_y;
}
floatGetPointx()
{
returnP1_x;
}
floatGetPointy()
{
returnP1_y;
}
private:
floatP1_x,P1_y;
};
【例7-5】对象的定义举例。
//examplech705.cpp
//Point.h
classPoint
{
public:
voidInitPoint(floatPointA_x=0,floatPointA_y=0);
voidMove(floatNew_x,floatNew_y);
floatGetPointx();
floatGetPointy();
private:
floatP1_x,P1_y;
};
voidmain()
{
Pointp1,p2;
}
【例7-6】圆点访问形式的应用。
//examplech706.cpp
#include
classDate
{
public:
voidSetvalue(intm,intd,inty)
{
month=m;
date=d;
year=y;
}
voidDisplay()
{
cout< } private: intmonth; intdate; intyear; }; voidmain() { Datetoday; cout<<"Todayis: "< today.Setvalue(18,12,2005);//圆点访问成员函数 today.Display();//圆点访问成员函数 } 【例7-7】成员指针访问形式的应用。 //eaxmplech707.cpp #include classptr_access { public: voidsetvalue(floata,floatb)//成员函数的实现 { x=a; y=b; } floatGetx() { returnx; } floatGety() { returny; } voidprint() { cout<<"x="< cout<<"y="< } private: //私有数据成员 floatx,y; }; voidmain() { floata1,a2; ptr_access*ptr=newptr_access; ptr->setvalue(2,8);//通过指针访问公有成员函数 ptr->print(); a1=(*ptr).Getx();//通过公有成员函数访问私有数据成员 a2=(*ptr).Gety(); cout<<"a1="< cout<<"a2="< } 【例7-8】构造函数应用举例。 //examplech708.cpp #include #include classComplex//复数类 { public: Complex(doubler,doublei);//构造函数声明 doubleabscomplex(); private: doublereal; doubleimag; }; Complex: : Complex(doubler,doublei)//构造函数实现 { cout<<"Executingconstructor..."< real=r; imag=i; cout<<"real="< } doubleComplex: : abscomplex()//成员函数的实现 { doublet; t=real*real+imag*imag; returnsqrt(t); } intmain() { ComplexA(1.2,2.8);//创建对象A时自动调用构造函数 ComplexB=A; cout<<"|A|="< cout<<"|B|="< return0; } 【例7-9】构造函数与析构函数的执行顺序。 //examplech709.cpp #include #include classComplex//复数类 { public: Complex(doubler,doublei);//构造函数声明 ~Complex();//析构函数声明 doubleabscomplex(); private: doublereal; doubleimag; }; Complex: : Complex(doubler,doublei)//构造函数实现 { cout<<"Executingconstructor..."< real=r; imag=i; cout<<"real="< } Complex: : ~Complex()//析构函数的实现 { cout<<"Executingdestructor..."; cout<<"real="< } doubleComplex: : abscomplex()//成员函数的实现 { doublet; t=real*real+imag*imag; returnsqrt(t); } intmain() { ComplexA(1.2,2.8);//定义复数类对象A ComplexB(2.2,2.8); cout<<"|A|="< cout<<"|B|="< return0; } 【例7-10】构造函数重载及析构函数的作用。 //examplech710.cpp #include #include constchar*null=""; classStudent { public: Student();//无参数构造函数的声明 //带参数构造函数的声明 Student(char*pname,charsex1,char*pid,inta,floats); voidgetid(char*pid); voidgetname(char*pname); voidgetsex(charsex1){sex=sex1;}//内联成员函数 voidgetage(inta){age=a;} voidgetscore(floats){score=s;} voiddisplay(); ~Student();//析构函数声明 private: char*name; charsex; char*id; intage; floatscore; }; Student: : Student()//无参数构造函数的实现 { id=newchar[10]; strcpy(id,"00000000"); name=newchar[20]; strcpy(name,null); sex=''; age=0; score=0; } //带参数构造函数的实现 Student: : Student(char*pname,charsex1,char*pid,inta,floats) { id=newchar[strlen(pid)+1];//动态申请内存单元 strcpy(id,pid); name=newchar[strlen(pname)+1]; strcpy(name,pname); sex=sex1; age=a; score=s; } voidStudent: : getid(char*pid) { delete[]id; id=newchar[strlen(pid)+1]; strcpy(id,pid); } voidStudent: : getname(char*pname) { delete[]name; name=newchar[strlen(pname)+1]; strcpy(name,pname); } voidStudent: : display() { cout<<"name: "< cout<<"id: "< cout<<"age: "< cout<<"sex: "< cout<<"score: "< cout< } Student: : ~Student() { delete[]name;//释放用new申请的内存单元 delete[]id;//将字符串所占用的空间全部释放掉 } voidmain() { Students1;//调用无参数构造函数创建对象s1 s1.display(); s1.getid("03060101"); s1.getname("WangFei"); s1.getsex('F'); s1.getage(19); s1.getscore(95); s1.display(); //通过调用带参数构造函数创建对象s2 Students2("ChenWei",'M',"03060102",18,98); s2.display(); } 【例7-11】复制构造函数自动调用之一。 //examplech711.cpp #include classLocation { public: Location(inta,intb)//构造函数 { x=a;y=b; cout<<"Executingconstructor"< cout<<"x="< } Location(constLocation&p)//复制构造函数 { x=p.x;y=p.y; cout<<"Executingcopy_constructor."< cout<<"x="< } ~Location()//析构函数 { cout<<"Executingdestructor"< } private: intx,y; }; voidmain() { Locationp1(5,18);//定义对象p1 Locationp2(p1);//定义对象p2并用p1初始化p2 } 【例7-12】复制构造函数自动调用之二。 //examplech712.cpp #include classLocation { public: Location(doublea,doubleb)//构造函数 { x=a;y=b; cout<<"Executingconstructor"< cout<<"x="< } Location(constLocation&p)//复制构造函数 { x=p.x;y=p.y; cout<<"Executingcopy_constructor."< cout<<"x="< } ~Location()//析构函数 { cout<<"Executingdestructor"< } doublegetx() { returnx; } doublegety() { returny; } private: doublex,y; }; voiddisplay(Locationp)//引用作为函数形参 { cout< cout< } voidmain() { Locationp1(5,18);//定义对象p1 display(p1);//对象p1作为函数实参 } 【例7-13】复制构造函数自动调用之三。 //examplech713.cpp #include classLocation { public: Location(doublea,doubleb)//构造函数 { x=a;y=b; cout<<"Executingconstructor"< cout<<"x="< } Location(constLocation&p)//复制构造函数 { x=p.x;y=p.y; cout<<"Executingcopy_constructor."< cout<<"x="< } ~Location()//析构函数 { cout<<"Executingdestructor"< } doublegetx() { returnx; } doublegety() { returny; } private: doublex,y; }; Locationfun(Locationp) { doublex,y; x=p.getx()+1; y=p.gety()+1; cout<<"x="< returnp; } voidmain() { Locationp1(5,18);//定义对象p1 Locationp2=fun(p1);//函数的返回值是类对象,用于初始化p2 } 【例7-14】浅复制举例。 //examplech714.cpp #include #include classPerson { public: Person(char*name1,inta,doubles); voiddisplay(); ~Person();//析构函数的声明 private: char*name; intage; doublesalary; }; Person: : Person(char*name1,inta,doubles) { name=newchar[strlen(name1)+1]; strcpy(name,name1); age=a; salary=s; } voidPerson: : display() { cout<<"name: "< cout<<"age: "< cout<<"salary: "< cout< } Person: : ~Person() { delete[]name; } voidmain() { PersonP1("WangWei",8,3880);//调用构造函数创建对象P1 P1.display(); PersonP2(P1);//调用复制构造函数,用P1的数据初始化对象P2 P2.display(); } 【例7-15】深复制应用举例。 //examplech715.cpp #include #include classPerson { public: Person(char*name1,inta,doubles); Person(constPerson&P0);//复制构造函数的声明 voiddisplay(); ~Person();//析构函数的声明 private: char*name; intage; doublesalary; }; Person: : Person(char*name1,inta,doubles) { name=newchar[strlen(name1)+1]; strcpy(name,name1); age=a; salary=s; } Person: : Person(constPerson&P0)//复制构造函数的实现 { name=newchar[strlen(P0.name)+1]; strcpy(name,P0.name); age=P0.age; salary=P0.salary; } voidPerson: : display() { cout<<"name: "< cout<<"age: "< cout<<"salary: "< cout< } Person: : ~Person() { delete[]name; } voidmain() { PersonP1("WangWei",8,3880);//调用构造函数创建对象P1 P1.display(); PersonP2(P1);//调用复制构造函数,用P1的数据初始化对象P2 P2.display(); } 【例7-16】静态数据成员的使用。 //examplech716.cpp #include #include classPerson { staticinttotal; public: Person(char*name1); voiddisplay() { cout< "; cout<<"total="< } private: char*name; intS_number; }; Person: : Person(char*name1) { name=newchar[strlen(name1)+1]; name=strcpy(name,name1); total++; S_number=total; } intPerson: : total=0; voidmain() {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 例题