C++ | 继承与组合 | A2实验五
- 类的组合
编写程序输出学生的基本信息。
要求:
(1)定义专业类Specialty,使其包含两个私有数据成员:专业名字sname和学分score。定义并实现该类的带参数的构造函数以及公有成员函(显示专业姓名和学分的函数showSp);
(2)定义学生类Student,使其包含三个私有数据成员:名字name、年龄 age、专业sp,定义并实现该类的构造函数以及公有成员函数(显示姓名、年龄和专业的函数showStu);
(3)在main函数中对上述设计进行测试。
#include <iostream>
#include<string>//<string>可以进行+ = += > 运算,<cstring>不行
using namespace std;
class Student;
class Specialty
{
public:
Specialty(string sn="计算机", int sc=1);//构造函数属于公有成员,不能独立在外
void showSp() { cout << "专业名字: " << sname << " " << "学分:" << score<<endl; }
private:
string sname;
int score;
};
class Student
{
public:
void showStu()
{
cout << "姓名:" << name << "; 年龄:" << age<<endl;
spe1.showSp();
}
Student()
{
cin >> age;
cin >> name;
}
private:
int age;
string name;
Specialty spe1;//※以另一个类的对象作为数据成员,是类的组合
};
Specialty::Specialty(string sn, int sc)
{
cin >> sn;
sname = sn;
cin >> sc;
score = sc;
}
int main()
{
Student t1;
t1.showStu();
system("pause");
return 0;
}
ps:
1.如果不是要求specially类必须带参数,代码可以更简单点
2.组合:一个类的对象 做 另一个类的数据成员
3.注意常见的低级错误:
成员函数忘加() ;
构造函数没写在public声明下.
================================================================================================
2.类的继承
编写程序计算出球、圆柱和圆锥的表面积和体积。
要求:
(1)定义一个基类圆,至少含有一个数据成员:半径;
(2)定义基类的派生类:球、圆柱、圆锥,都含有求表面积和体积的成员函数和输出函数;
(3)定义主函数,求球、圆柱、圆锥的和体积。
#include <iostream>
using namespace std;
class Circle
{
public:
Circle(double r = 0) {};//不加{}就编译失败,神秘
protected:
double r;
const double PI = 3.14;
};
class Qiu:public Circle
{
public:
Qiu()
{
cout << "输入球的半径"<<endl;
cin >> r;
}
double volume() { return(4.0/3)*PI*pow(r, 3); }
double area() { return (4.0) * PI*r*r; }
void show() { cout << "球的 体积为:" << volume() << " " << "表面积为:" << area() << endl; }
};
class Zui :public Circle
{
public:
Zui()
{
cout << "分别输入圆锥的半径和母线长"<<endl;
cin >> r;
cin >> l;//母线
}
double volume() { return (PI*r*r*l)/3 ; }
double area() { return PI*r*l+PI*r*r; }
void show() { cout << "圆锥的 体积为:" << volume() << " " << "表面积为:" << area() << endl; }
private:
double l;
};
class Zhu : public Circle
{
public:
Zhu()
{
cout << "分别输入圆柱的半径和柱高"<<endl;
cin >> r;
cin >> h;
}
double volume() { return h*PI*pow(r, 2); }
double area() { return 2*PI*r*(h+ r); }
void show() { cout << "圆柱的 体积为:" << volume() << " " << "表面积为:" << area() << endl; }
private:
double h;//柱高
};
int main()
{
Qiu qiu1;
Zui zui1;
Zhu zhu1;
qiu1.show();
zui1.show();
zhu1.show();
system("pause");
return 0;
}

浙公网安备 33010602011771号