一.类、对象与继承实例
1.点类
定义平面点类 POINT,点的 x,y 坐标是其数据成员,double 类型,私有;成员函数有 set()设置点的 x,y 坐标,distance()计算和另一个点的距离,show()显示坐标的位置信息。成员函数均为公有。编写主函数,使用 POINT 类定义两个点对象,输入并设置两个点的坐标,显示依次两个点的坐标信息,计算并显示两个点的距离。
代码如下:
#include<iostream>
#include<cmath>
using namespace std;
class POINT
{
private:double x,y;
public:
void set(double a, double b); //设置点x,y的坐标
void show(); //显示坐标位置信息
double distance(POINT b); //计算距离
};
int main()
{
POINT a, b; //定义点的对象
double x, y;
cin>>x>>y; //输入点x,y的坐标
a.set(x,y); //设置a点坐标
cin>>x>>y;
b.set(x,y);
a.show(); cout<<endl;
b.show(); cout<<endl; //显示a,b点坐标
cout<<a.distance(b)<<endl;
return 0;
}
//三个成员函数
void POINT::set(double a,double b)
{
x=a;
y=b;
}
void POINT::show() //显示点
{
cout<<"("<<x<<","<<y<<")"<<endl; //显示点的坐标
}
double POINT::distance(POINT b) //计算距离
{
double s=sqrt((x-b.x)*(x-b.x)+(y-b.y)*(y-b.y));
return s;
}
2.带构造函数的点类
定义平面点类POINT,点的 x,y 坐标是其数据成员,double 类型,私有;成员函数有默认构造函数,带两参数x,y 坐标的构造函数, distance()计算和另一个点的距离,show()显示坐标的位置信息。成员函数均为公有,默认构造函数将点的坐标设为(0,0)。编写主函数,输入两个点的坐标并由此定义两个点对象,依次两个点的坐标信息,计算并显示两个点的距离。
代码如下:
#include<iostream>
#include<cmath>
using namespace std;
class POINT
{
double x,y;
public:POINT()
{x=0,y=0;}
POINT(double x0,double y0){
x=x0,y=y0;
}
void set(double x0,double y0);
double distance(POINT a); //计算距离
void show(); //显示位置信息
double getx()
{
return x;
}
double gety()
{
return y;
}
};
double POINT::distance(POINT a) //析构函数
{
return sqrt((x-a.getx())*(x-a.getx())+(y-a.gety())*(y-a.gety())); //求出两点之间的距离
}
void POINT::show() //point的成员函数被显示
{
cout<<"("<<x<<","<<y<<")"<<endl;
}
int main()
{
double x,y;
cin>>x>>y;
POINT a(x,y); //调运析构函数定义的对象a
cin>>x>>y;
POINT b(x,y); //调用析构函数定义对象b
a.show();
b.show();
cout<<a.distance(b)<<endl;
return 0;}
3、带拷贝构造函数和析构函数的矩形类
定义矩形类 RECT,两个对角顶点坐标是其数据成员(mX1, mY1, mX2,mY2),int 类型,私有;成员函数有默认构造设置所有数据成员值为 0,四参数构造函数设置两个顶点坐标,拷贝构造函数,set()设置两个顶点坐标,area()计算面积,perimeter()计算周长,showinfo()显示两个顶点信息,show()显示由“”组成的矩形(宽是矩形的宽度,高是矩形的高度),析构函数。成员函数均为公有,析构函数中显示两个顶点信息和字符串“deconstruct”。编写主函数,使用RECT 类定义一个矩形类对象a(默认构造),输入并设置矩形的两个顶点,显示矩形的成员信息,计算并显示矩形的周长和面积,显示由“”组成的矩形;由刚输入的顶点向右平移 2 单位构造对象 b,再由对象 b 构造对象 c,显示矩形 c 的成员信息,计算并显示矩形 c 的周长和面积,显示由“*”组成的矩形c。
提示:矩形图形显示函数如下:
void show()
{for (int i = 0; i < (abs(mY2 - mY1)); ++i)
{for (int j = 0; j < (abs(mX2 - mX1)); ++j)
cout << “*”;
cout << endl; } }
析构函数参考如下:~Rect() { cout << “(” << mX1 << “,” << mY1 << “,” << mX2 << “,” << mY2 << “)deconstruct” << endl; }
#include<iostream>
#include <cmath>
using namespace std;
class RECT
{
public:
RECT()
{
this->mx1=0; //初始值
this->my1=0;
this->mx2=0;
this->my2=0;
}
RECT(int a,int b,int c,int d)
{
this->mx1=a; //赋值 this表示本对象的指针
this->my1=b;
this->mx2=c;
this->my2=d;
}
RECT(RECT &r) //拷贝构造函数 类名(类名&对象名)
{
this->mx1=r.mx1;
this->my1=r.my1;
this->mx2=r.mx2;
this->my2=r.my2;
}
void set(int a1,int b1,int c1,int d1) //设置数值
{
this->mx1=a1;
this->my1=b1;
this->mx2=c1;
this->my2=d1;
}
int area()
{
int s;
s=(abs(this->mx2-this->mx1)*abs(this->my2-this->my1));
return s; //求面积
}
int perimeter()
{
int l;
l=2*(abs(this->mx2-this->mx1)+abs(this->my2-this->my1));
return l; //求周长
}
void showinfo() //输出信息
{
cout<<"("<<this->mx1<<","<<this->my1<<","<<this->mx2<<","<<this->my2<<")"<<endl;
}
void show() //矩形图形显示函数
{
for(int i=0;i<(abs(this->my2-this->my1));i++)
{
for(int j=0;j<(abs(this->mx2-this->mx1));j++)
cout<<"*";
cout<<endl;
}
}
~RECT() //析构函数 释放对象占用的空间
{
cout<<"(" <<mx1<<"<"<<my2<<","<<mx2<<","<<my2<<") deconstruct"<<endl;
}
private:
int mx1;
int my1;
int mx2;
int my2;
};
int main()
{
RECT a; //定义矩形类对象a 默认构造
double x1,x2,y1,y2; //矩形两顶点
cin>>x1>>y1>>x2>>y2;
a.set(x1,y1,x2,y2); //设置
a.showinfo();
cout<<endl; //显示矩形顶点信息
cout<<a.perimeter()<<endl;
cout<<a.area()<<endl;
a.show(); //显示由*组成的矩形
RECT b(x1+2,y1,x2+2,y2); // 输入顶点定义对象b 使用四参数构造函数
RECT c(b);
//由对象b定义对象c 使用拷贝构造函数
c.showinfo();
cout<<endl;
cout<<c.perimeter()<<endl;
cout<<c.area()<<endl;
c.show();
return 0;
知识补充:
析构函数:
1.析构函数的功能是当对象被撤销时,释放该对象占用的内存空间。
析构函数没有返回值,没有参数,每个类只有一个析构函数。析构函数的函数名的类名前加~。
2.析构函数的手工调用:
语法如下:
对象名.类名::析构函数名
而构造函数只能由系统调用,不能用上述方法调用。