C++实践参考:警察与厨师

2024-03-03 06:48
文章标签 c++ 实践 参考 警察 厨师

本文主要是介绍C++实践参考:警察与厨师,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【项目-警察和厨师】
(1)根据下面的类图,定义各个类:
这里写图片描述
要求:
各个成员函数,只要输出相关的信息即可,暂不深究其业务功能
请为各个类增加构造函数
在实现中,可以增加需要的其他函数
自行编制main函数,完成初步的测试

[参考解答1]

#include <iostream>
using namespace std;
class Person
{public:Person(int, string);void action();string getName(){return name;}
private:int age;string name;
};
Person::Person(int a, string n):age(a), name(n) {}
void Person::action()
{cout<<name<<" do some action"<<endl;
}
class Police: public Person
{
public:Police(int, string, int);void arrest(Person);
private:int level; //级别
};
Police::Police(int a, string n, int l):Person(a,n),level(l) {}
void Police::arrest(Person p)
{cout<<" Police "<<getName()<<" arrest " <<p.getName()<<endl;
}
class Cook: public Person
{
public:Cook(int, string, double);void getCake(int);
private:double salary; //薪水
};
Cook::Cook(int a, string n, double s):Person(a,n),salary(s) {}
void Cook::getCake(int n)
{cout<<" Cook "<<getName()<<" gave me " <<n<<" cakes."<<endl;
}int main()
{Person tom(120,"Tom");Police jack(30,"Jack",2);Cook john(24,"John",5000);jack.arrest(tom);john.getCake(4);return 0;
}

(2)下面的类图,为Polic类和Cook类增加了对象成员,请扩充代码,完成上述各项要求
这里写图片描述
[参考解答1]

#include <iostream>
using namespace std;
class Person
{public:Person(int, string);void action();string getName(){return name;}
private:int age;string name;
};
Person::Person(int a, string n):age(a), name(n) {}
void Person::action()
{cout<<name<<" do some action"<<endl;
}
class Police: public Person
{
public:Police(int a, string n, int l, int la, string ln);void arrest(Person);void show();
private:int level; //级别Person leader;  //领导
};
Police::Police(int a, string n, int l, int la, string ln):Person(a,n),level(l),leader(la,ln) {}
void Police::arrest(Person p)
{cout<<"Police "<<getName()<<" arrest " <<p.getName()<<endl;
}
void Police::show()
{cout<<"Police "<<getName()<<", leader is " <<leader.getName()<<endl;
}class Cook: public Person
{
public:Cook(int a, string n, double s,int pa, string pn, int pl, int pla, string pln);void getCake(int);void show();
private:double salary; //薪水Police protector;  //厨师小店的片区警察
};
Cook::Cook(int a, string n, double s,int pa, string pn, int pl, int pla, string pln):Person(a,n),salary(s),protector(pa,pn,pl,pla,pln) {}
void Cook::getCake(int n)
{cout<<"Cook "<<getName()<<" gave me " <<n<<" cakes."<<endl;
}
void Cook::show()
{cout<<"Cook "<<getName()<<" is protected by Police "<<protector.getName()<<endl;
}int main()
{Person tom(120,"Tom");Police jack(30,"Jack",2,43,"Jerry");Cook john(24,"John",5000,30,"Jack",2,43,"Jerry");jack.show();john.show();return 0;
}

评价:
- 这些代码是完成是题目的要求,但是,并不好。
- 每个构造函数带上一长串的参数,难写,难看,这本身就是质量问题。
- 这种写法,也根本未体现对象的“封装”——都是一串散乱的基本类型数据在工作。
- 我们希望看到jack警察的上司就是一个人,john厨师的保卫者,就是一个警察。
- 需要做的是,利用对象作为构造函数的参数,使结构清晰。
- 当然,这时需要增加相关的复制构造函数了。

[参考解答2]

#include <iostream>
using namespace std;
class Person
{
public:Person(int, string);void action();string getName(){return name;}
private:int age;string name;
};
Person::Person(int a, string n):age(a), name(n) {}
void Person::action()
{cout<<name<<" do some action"<<endl;
}
class Police: public Person
{
public:Police(int a, string n, int l, Person);void arrest(Person);void show();
private:int level; //级别Person leader;  //领导
};
Police::Police(int a, string n, int l, Person p):Person(a,n),level(l),leader(p) {}
void Police::arrest(Person p)
{cout<<"Police "<<getName()<<" arrest " <<p.getName()<<endl;
}
void Police::show()
{cout<<"Police "<<getName()<<", leader is " <<leader.getName()<<endl;
}class Cook: public Person
{
public:Cook(int a, string n, double s,Police p);void getCake(int);void show();
private:double salary; //薪水Police protector;  //厨师小店的片区警察
};
Cook::Cook(int a, string n, double s,Police p):Person(a,n),salary(s),protector(p) {}
void Cook::getCake(int n)
{cout<<"Cook "<<getName()<<" gave me " <<n<<" cakes."<<endl;
}
void Cook::show()
{cout<<"Cook "<<getName()<<" is protected by Police "<<protector.getName()<<endl;
}int main()
{Person jerry(43,"Jerry");Police jack(30,"Jack",2,jerry);Cook john(24,"John",5000,jack);jack.show();john.show();return 0;
}

评论:
这样做,是不是在逻辑上很清楚了?
Person、Police类中该定义复制构造函数,在这里没有写,用其默认复制构造函数了。相关类中没有定义指针型成员,不必要深复制,所以,可以使用默认复制构造函数。

这篇关于C++实践参考:警察与厨师的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/768812

相关文章

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示