• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Hánina Chata

为什么不问问神奇海螺呢?
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

C++面向对象入门:实验六

一、实验目的

  1. 掌握基类与派生类的定义与使用方法。

  2. 学习虚函数和纯虚函数的声明与使用。

  3. 掌握抽象类的定义与使用。

  4. 熟悉运算符重载的基本方法。

二、实验内容

  1. 输入并编译程序,运行出结果,并解释每行语句作用。
#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
  1. 输入并编译程序,运行出结果,并解释每行语句作用。
#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
两个圆的半径不相等
  1. 某学校对教师每月工资的计算规定如下: 固定工资+课时补贴。教授的固定工资为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)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3