C++面向对象入门:实验六
一、实验目的
-
掌握基类与派生类的定义与使用方法。
-
学习虚函数和纯虚函数的声明与使用。
-
掌握抽象类的定义与使用。
-
熟悉运算符重载的基本方法。
二、实验内容
- 输入并编译程序,运行出结果,并解释每行语句作用。
#include<iostream>
using namespace std;
class A{
public: //定义类A,访问权限设为public
A(int a=10) //类A的构造函数,参数a=10
:_a(a) //将参数a赋给成员变量_a
{ }
virtual void Get(){//声明并定义虚函数
cout<<"A::_a="<<_a<<endl;//输出_a
}
public: //访问权限为public
int _a; //定义公有成员变量_a
};
class B : public A{ //定义类B,公有继承A
public: //访问权限为public
B(int b=20) //类B的构造函数,参数b=20
:_b(b) //初始化_b
{ }
void Get(){ //覆盖基类虚函数
cout<<"B::_b="<<_b<<endl;//输出_b
}
int _b;//定义B的成员变量_b
};
int main(){
A a1; //创建A类对象a1,使用默认构造函数
B b1; //创建B类对象b1
A* ptr1=&a1;//声明基类指针ptr1,指向a1对象
ptr1->Get();//调用虚函数,ptr1指向A类对象
ptr1=&b1; //将ptr1的指向改为派生类对象b1
ptr1->Get();//调用虚函数,ptr1指向B类对象
return 0;
}
运行结果
A::_a=10
B::_b=20
- 输入并编译程序,运行出结果,并解释每行语句作用。
#include<iostream>
using namespace std;
const double PI=3.14159;//定义圆周率常量
class Graph{ //定义抽象基类Graph
public:
virtual double area()=0;
//声明纯虚函数area(),使Graph成为抽象类
};
class round:public Graph{
//定义圆形类,继承Graph
public:
double radius; //圆的半径
round(double r){radius=r;} //构造函数
double area(){ //重写area()函数,计算圆面积
return PI*radius*radius;}
bool round::operator==(const round &n)const{//重载==运算符
return(radius==n.radius);}//比较两个圆半径是否相等
};
class column:public round{
//定义圆柱体类,继承圆形类
public:
column(double r,double h):round(r){height=h;} //构造函数
double area(){ //重写area(),计算圆柱体表面积
return 2.0*PI*radius*(height+radius);}
private:
double height; //圆柱体的高度
};
int main(){
Graph *p; //声明基类Graph的指针p
round sobj1(2),sobj2(3);//创建圆对象
p=&sobj1; //p指向第一个圆对象
cout<<"半径为2的圆的面积为:"<<p->area()<<endl;//调用面积计算
column cobj(3,4);//创建圆柱体对象
p=&cobj; //p指向圆柱体对象
cout<<"半径为3,高为4的圆柱体的面积为:"<<p->area()<<endl;//调用面积计算
if(sobj1==sobj2)//使用重载==运算符比较两个圆的半径
cout<<"两个圆的半径相等"<<endl;
else cout<<"两个圆的半径不相等"<<endl;
system("pause");//暂停程序
}
运行结果
半径为2的圆的面积为:12.5664
半径为3,高为4的圆柱体的面积为:131.947
两个圆的半径不相等
- 某学校对教师每月工资的计算规定如下: 固定工资+课时补贴。教授的固定工资为5000元,每个课时补贴50元。副教授的固定工资为3000元,每个课时补贴30元。讲师的固定工资为2000元,每个课时补贴20元。定义教师抽象类,派生不同职称的教师类,编写程序求若干个教师的月工资(此处假设某教授达到10课时,某副教授达到20课时,某讲师达到30课时)
#include<iostream>
using namespace std;
class teacher{
protected:
int hours;
public:
teacher(int h):hours(h){}
virtual int Salary()=0;
virtual ~teacher(){}
};
class professor1:public teacher{
public:
professor1(int h):teacher(h){}
int Salary() override{
return 5000+50*hours;}
};
class professor2:public teacher{
public:
professor2(int h):teacher(h){}
int Salary() override{
return 3000+30*hours;}
};
class lecturer:public teacher{
public:
lecturer(int h):teacher(h){}
int Salary() override{
return 2000+20*hours;}
};
int main(){
teacher* teachers[3];
teachers[0]=new professor1(10);
teachers[1]=new professor2(20);
teachers[2]=new lecturer(30);
for(int i=0;i<3;i++){
int salary=teachers[i]->Salary();
cout<<i+1<<"教师的月工资: "<<salary<<endl;}
for(int i=0;i<3;i++){
delete teachers[i];}
return 0;
}
三、实验总结
本次实验进一步巩固了面向对象编程中的继承、多态、抽象类和运算符重载等核心概念。也练习了纯虚函数的使用以及运算符重载的方法,掌握了如何为自定义类型定义运算符。这次实验不仅加深了我对C++面向对象机制的理解,也提升了实际问题分析和程序设计的能力。
By @哈娜Official(HanaNováčková:https://www.cnblogs.com/hanina-chata/p/19548419)
posted on 2026-01-31 12:00 HanaNováčková 阅读(0) 评论(0) 收藏 举报
浙公网安备 33010602011771号