计算机程序设计C++ MOOC
测试与作业C++基础练习100题
##第十二周基本练习
本周内容C++中的多态性
- 形状类虚函数
#include <iostream>
using namespace std;
class SHAPE
{
private:
double x, y;
public:
SHAPE(double x = 0, double y = 0) :x(x), y(y){};
void set(double x, double y){ this->x = x; this->y = y; }
virtual double area(){ return 0; };
};
class CIRCLE :public SHAPE
{
private:
double radius;
public:
CIRCLE(double x = 0, double y = 0, double r = 0) :SHAPE(x, y), radius(r){};
void set(double x, double y, double r){ SHAPE::set(x, y); radius = r; };
double area(){ return 3.14*radius*radius; }
};
int main()
{
SHAPE sp(1, 2);
CIRCLE c(3, 4, 5);
SHAPE *p;
SHAPE &sp2 = c;
p = &sp;
cout << p->area() << endl;
p = &c;
cout << p->area() << endl;
cout << sp2.area() << endl;
return 0;
}
- 形状类纯虚函数
#include <iostream>
using namespace std;
class SHAPE
{
private:
double x, y;
public:
SHAPE(double x = 0, double y = 0) :x(x), y(y){};
void set(double x, double y){ this->x = x; this->y = y; }
virtual double area() = 0;
};
class CIRCLE :public SHAPE
{
private:
double radius;
public:
CIRCLE(double x = 0, double y = 0, double r = 0) :SHAPE(x, y), radius(r){};
void set(double x, double y, double r){ SHAPE::set(x, y); radius = r; };
double area(){ return 3.14*radius*radius; }
};
int main()
{
CIRCLE c(3, 4, 5);
SHAPE *p;
SHAPE &sp2 = c;
p = &c;
cout << p->area() << endl;
cout << sp2.area() << endl;
return 0;
}
- 三维空间向量类重载加法运算
#include <iostream>
using namespace std;
class VECTOR3D
{
private:
double x, y, z;
public:
VECTOR3D(double a = 0, double b = 0, double c = 0) :x(a), y(b), z(c){};
void set(double a, double b, double c){ x = a; y = b; z = c; }
void show()
{
cout << '(' << x << ' ' << y << ' ' << z << ')';
}
VECTOR3D operator + (VECTOR3D);
};
VECTOR3D VECTOR3D::operator +(VECTOR3D a)
{
VECTOR3D temp;
temp.x = x + a.x;
temp.y = y + a.y;
temp.z = z + a.z;
return temp;
}
int main()
{
VECTOR3D a(1, 2, 3), b(3, 4, 5), c;
double x, y, z;
a.show();
cout << endl;
b.show();
cout << endl;
c.show();
cout << endl;
cin >> x >> y >> z;
b.set(x, y, z);
c = a + b;
a.show();
cout << endl;
b.show();
cout << endl;
c.show();
cout << endl;
return 0;
}
- 复数类重载乘法
#include <iostream>
using namespace std;
class COMPLEX
{
private:
double real, imag;
public:
COMPLEX(double r = 0, double i = 0) :real(r), imag(i){};
void set(double r, double i){ real = r; imag = i; }
void show()
{
if (imag>=0)
cout << real << '+' << imag << 'j';
else
cout << real << '-' << -imag << 'j';
}
COMPLEX operator *(COMPLEX);
};
COMPLEX COMPLEX::operator * (COMPLEX a)
{
COMPLEX temp;
temp.real = real*a.real - imag*a.imag;
temp.imag = imag*a.real + real*a.imag;
return temp;
}
int main()
{
COMPLEX a(1, 2), b(3, 4), c;
double x, y;
a.show();
cout << endl;
b.show();
cout << endl;
c.show();
cout << endl;
cin >> x >> y ;
b.set(x, y);
c = a * b;
a.show();
cout << endl;
b.show();
cout << endl;
c.show();
cout << endl;
return 0;
}
以上为第十二周的基础练习。