目录
题目
创建一个场地类 Court,包含一个成员函数 bounce,在成员函数中输出“反弹”
创建两个网球场地类继承场地类,分别为硬地场地和红士场地,两个类都覆盖基类的 bounce函数,分别输出“砰砰砰”和“咚咚咚”
创建一个网球类 Tennis,要求:
①有一个如下格式的构造函数:
Tennis(Court*c)
在 Tennis 的构造函数中测试场地对象的 bounce 功能。
②屏蔽 Tennis 类的复制语义(拷贝构造、赋值运算符)
③屏蔽隐式调用构造函数
④在 Tennis 的析构函数中 delete 场地对象,
在主函数中分别创建硬地场地对象、红土场地对象与网球对象测试功能。
思路
一、整体功能概述
实现了一个简单的网球场地模拟系统。通过定义基类
Court
以及两个派生类YingCourt
(硬地网球场)和RedCourt
(红土网球场),并在Tennis
类中使用指向Court
类的指针来模拟不同类型的网球场。二、类的定义与分析
Court
类:
- 成员函数:
bounce()
:虚函数,输出 “反弹”,作为网球场的通用行为。- 这个类作为基类,为不同类型的网球场提供了一个基本的框架。
YingCourt
类和RedCourt
类:
- 这两个类都是
Court
的派生类,分别代表硬地网球场和红土网球场。- 成员函数:
bounce()
:重写了基类的bounce
函数,分别输出 “砰砰砰” 和 “咚咚咚”,以体现不同类型网球场的独特反弹效果。
Tennis
类:
- 成员变量:
Court* court
:指向Court
类的指针,用于存储不同类型网球场的对象。- 构造函数:
explicit Tennis(Court* c)
:接受一个指向Court
类的指针作为参数,在构造函数中调用该指针所指向的网球场对象的bounce
函数,并将指针存储在成员变量中。同时,该构造函数被声明为explicit
,以防止隐式类型转换。- 析构函数:
~Tennis()
:在析构函数中释放由构造函数分配的Court
对象的内存。三、主函数分析
- 在
main
函数中,分别创建一个硬地网球场对象yc
和一个红土网球场对象rc
。- 然后,使用这两个对象分别创建了两个
Tennis
对象yt
和rt
,在创建Tennis
对象的过程中,会调用相应网球场对象的bounce
函数,输出对应的反弹效果。
代码
#include <iostream>
using namespace std;
class Court
{
public:
virtual void bounce()
{
cout<<"反弹"<<endl;
}
};
class YingCourt:public Court
{
public:
void bounce() override
{
cout<<"砰砰砰"<<endl;
}
};
class RedCourt:public Court
{
public:
void bounce() override
{
cout<<"咚咚咚"<<endl;
}
};
class Tennis
{
private:
Court* court;
Tennis(const Tennis& T){}
Tennis& operator =(const Tennis& t) {}
public:
explicit Tennis(Court* c) : court(c)
{
c->bounce();
}
~Tennis()
{
delete court;
}
};
int main()
{
YingCourt yc;
Tennis yt(&yc);
RedCourt rc;
Tennis rt(&rc);
return 0;
}