第12周基础练习(febwuifewui)

第12周基础练习

1.形状类虚函数(10分)

题目内容:

定义SHAPE类,表示几何图形,x,y位置坐标为其私有数据成员,double;成员函数有:默认构造设置位置坐标为(0,0);两参数构造函数设置x,y;set()函数设置x,y坐标;area()返回面积,虚函数,返回0。成员函数均为公有。

定义派生类——圆类CIRCLE,继承上面的SHAPE类,增加数据成员radius表示半径,double,私有。成员函数有:默认构造函数,设置圆心半径均为0;三参数构造函数初始化圆心和半径;set()设置圆心和半径;area()返回圆的面积,pai取3.14。

编写主程序,(1)定义基类对象sp,初始化位置为(1,2);定义CIRCLE类对象c,初始化位置、半径为(3,4,5);定义SHAPE指针p,定义SHAPE类型的c的引用sp2。p指向sp对象,计算并显示面积;p指向派生类对象c,计算并显示面积;通过引用sp2计算并显示面积。主函数如下:

输入:无

输出:固定值

0

78.5

78.5

样例1输入:

样例1输出:

0

78.5

78.5

【注意】本题的结果不是问题,关键是使用虚函数,并且观察和理解基类指针指向派生类对象时访问的是哪个成员函数;通过基类对派生类的引用访问的是哪个成员函数。下面提供了完整源程序,完成后,试试在类中去掉virtual看运行结果。

//形状类虚函数
#include<iostream>
using namespace std;
#define PI 3.14
class Shape
{
private:
	double x, y;
public:
	Shape();
	Shape(double, double);
	void set(double, double);
	virtual double area() { return 0; }
};
Shape::Shape()
{
	x = 0;
	y = 0;
}
Shape::Shape(double a, double b)
{
	x = a;
	y = b;
}
void Shape::set(double a, double b)
{
	x = a;
	y = b;
}
/*-------------------------------------*/
class Circle :public Shape
{
private:
	double radius;
public:
	Circle();
	Circle(double a, double b, double r);
	void set(double a, double b, double r);
	virtual double area();
};
Circle::Circle()
{
	Shape::set(0, 0);
	radius = 0;
}
Circle::Circle(double a,double b,double r)
{
	Shape::set(a, b);
	radius = r;
}
void Circle::set(double a, double b, double r)
{
	Shape::set(a, b);
	radius = r;
}
double Circle::area()
{
	return PI * radius * radius;
}
/*--------------------------------------*/
int main()
{
	Shape sp(1, 2), * p;
	Circle c(3, 4, 5);
	Shape& sp2 = c;//Shape类型的c的引用
	p = &sp;
	cout << p->area() << endl;
	p = &c;
	cout << p->area() << endl;
	cout << sp2.area() << endl;
	return 0;
	
}

2.形状类纯虚函数(10分)

题目内容:

定义SHAPE类,表示几何图形,x,y位置坐标为其私有数据成员,double;成员函数有:默认构造设置位置坐标为(0,0);两参数构造函数设置x,y;set()函数设置x,y坐标;area()返回面积,纯虚函数(纯虚函数的类称为抽象类)。成员函数均为公有。

定义派生类——圆类CIRCLE,继承上面的SHAPE类,增加数据成员radius表示半径,double,私有。成员函数有:默认构造函数,设置圆心半径均为0;三参数构造函数初始化圆心和半径;set()设置圆心和半径;area()返回圆的面积,pai取3.14。

编写主程序,定义CIRCLE类对象c,初始化位置、半径为(3,4,5);定义SHAPE指针p,定义SHAPE类型的c的引用sp2。p指向派生类对象c,计算并显示面积;通过引用sp2计算并显示面积。主函数如下:

输入:无

输出:固定值

78.5

78.5

样例1输入:

样例1输出:

78.5

78.5

//形状类纯虚函数
#include<iostream>
using namespace std;
#define PI 3.14
class Shape
{
private:
	double x, y;
public:
	Shape();
	Shape(double, double);
	void set(double, double);
	virtual double area() = 0;//纯虚函数
};
Shape::Shape()
{
	x = 0;
	y = 0;
}
Shape::Shape(double a, double b)
{
	x = a;
	y = b;
}
void Shape::set(double a, double b)
{
	x = a;
	y = b;
}
/*-------------------------------------*/
class Circle :public Shape
{
private:
	double radius;
public:
	Circle();
	Circle(double a, double b, double r);
	void set(double a, double b, double r);
	virtual double area();
};
Circle::Circle():Shape()
{
	radius = 0;
}
Circle::Circle(double a, double b, double r):Shape(a,b)
{
	radius = r;
}
void Circle::set(double a, double b, double r)
{
	Shape::set(a, b);
	radius = r;
}
double Circle::area()
{
	return PI * radius * radius;
}
/*--------------------------------------*/
int main()
{
	Circle c(3, 4, 5);
	Shape* p;
	Shape& sp2 = c;//Shape类型的c的引用
	p = &c;
	cout << p->area() << endl;
	cout << sp2.area() << endl;
	return 0;

}

3.三维空间向量类重载加法运算(10分)

题目内容:

定义空间向量类VECTOR3D,x,y,z坐标分量为其私有数据成员,double;成员函数有:默认构造设置三个分量为(0,0,0);三参数构造函数设置x,y,z;set()函数设置x,y,z坐标;show()函数显示向量为(x,y,z)的形式;重载加运算实现和另一个VECTOR3D对象的加操作。成员函数均为公有。

编写主程序,(1)定义对象a,初始化为(1,2,3);定义对象b,初始化(3,4,5);定义对象c,初始化为(0,0,0),依次显示三个对象。输入三个实数,重新设置b,令c=a+b,再显示a,b,c。主函数如下:

输入:一行三个实数,用空格隔开。

输出:6行,6个向量信息,每个向量用小括号扩起来,分量用空格隔开。

样例1输入:

1 2 1

样例1输出:

(1 2 3)

(3 4 5)

(0 0 0)

(1 2 3)

(1 2 1)

(2 4 4)

//三维空间向量类重载加法运算
#include<iostream>
using namespace std;
class Vector
{
private:
	double x, y, z;
public:
	Vector();
	Vector(double, double, double);
	void set(double, double, double);
	void show();
	Vector operator+(Vector&);
};
Vector::Vector()
{
	x = 0;
	y = 0;
	z = 0;
}
Vector::Vector(double x, double y, double z)
{
	this->x = x;
	this->y = y;
	this->z = z;
}
void Vector::set(double x, double y, double z)
{
	this->x = x;
	this->y = y;
	this->z = z;
}
void Vector::show()
{
	cout << '(' << x << ' ' << y << ' ' << z << ')' << endl;
}
Vector Vector::operator+(Vector& a)
{
	Vector temp;
	temp.x = x + a.x;
	temp.y = y + a.y;
	temp.z = z + a.z;
	return temp;
}
/*******************************************************/
int main()
{
	double x, y, z;
	cin >> x >> y >> z;
	Vector a(1, 2, 3), b(3, 4, 5), c;
	a.show();
	b.show();
	c.show();
	b.set(x, y, z);
	c = a + b;
	a.show();
	b.show();
	c.show();
	return 0;
}

4.复数类重载乘法(10分)

题目内容:

定义复数类COMPLEX,实部、虚部为其私有数据成员,double;成员函数有:默认构造设置设置实部、虚部为(0,0);两参数构造函数设置实部、虚部为x,y;set()函数设置实部、虚部为x,y;show()函数显示复数为x+yj的形式(如0+0j,0+1j);重载乘法运算实现和另一个复数对象的乘操作。成员函数均为公有。

编写主程序,(1)定义对象a,初始化为(1,2);定义对象b,初始化(3,4);定义对象c,初始化为(0,0),依次显示三个对象。输入两个实数,重新设置b的实部虚部,令c=a+b,再显示a,b,c。主函数如下:

输入:两个实数,用空格隔开。

输出:6行,6个复数值。

样例1输入:

1 2

样例1输出:

1+2j

3+4j

0+0j

1+2j

1+2j

-3+4j

//复数类重载乘法
#include<iostream>
using namespace std;
class Complex
{
private:
	double x, y;
public:
	Complex();
	Complex(double, double);
	void set(double, double);
	void show();
	Complex operator*(Complex&);
};
Complex::Complex()
{
	x = 0;
	y = 0;
}
Complex::Complex(double x, double y)
{
	this->x = x;
	this->y = y;
}
void Complex::set(double x, double y)
{
this->x = x;
this->y = y;
}
void Complex::show()
{
	if (y >= 0)
		cout << x << "+" << y << "j" << endl;
	if (y < 0)
		cout << x << "-" << -y << 'j' << endl;
}
Complex Complex::operator*(Complex& a)
{
	double real, imag;
	real = this->x * a.x - (this->y * a.y);
	imag = this->x * a.y + this->y * a.x;
	Complex temp(real, imag);
	return temp;
}
/***********************************************/
int main()
{
	double x, y;
	cin >> x >> y;
	Complex a(1, 2), b(3, 4), c;
	a.show();
	b.show();
	c.show();
	b.set(x, y);
	c = a * b;
	a.show();
	b.show();
	c.show();
	return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值