首页 > 编程语言 >打卡 pta c++ 汽车收费

打卡 pta c++ 汽车收费

时间:2023-04-17 21:14:25浏览次数:37  
标签:guest weight no int pta c++ Vehicle 打卡 string

现在要开发一个系统,管理对多种汽车的收费工作。
给出下面的一个基类框架

class Vehicle

{

protected:

string NO;
public:

Vehicle(string n){

NO = n;

}
virtual int fee()=0;//计算应收费用

};

以Vehicle为基类,构建出Car、Truck和Bus三个类。

Car的收费公式为: 载客数*8+重量*2

Truck的收费公式为:重量*5

Bus的收费公式为: 载客数*3

生成上述类并编写主函数

主函数根据输入的信息,相应建立Car,Truck或Bus类对象,对于Car给出载客数和重量,Truck给出重量,Bus给出载客数。假设载客数和重量均为整数

输入格式:第一行输入测试用例数。接着每个测试用例占一行,每行给出汽车的基本信息,第一个数据为当前汽车的类型:1为car,2为Truck,3为Bus。第二个数据为它的编号,接下来Car是载客数和重量,Truck要求输入重量,Bus要求输入载客数。

要求输出各车的编号和收费。

裁判测试程序样例:

#include<iostream>
#include <string>
using namespace std;
class Vehicle
{
protected:
string NO;//编号
public:
Vehicle(string n){ NO = n; }
virtual int fee()=0;//计算应收费用
};

/* 请在这里填写答案 */

int main()
{
Car c("",0,0);
Truck t("",0);
Bus b("",0);
int i, repeat, ty, weight, guest;
string no;
cin>>repeat;
for(i=0;i<repeat;i++){
cin>>ty>>no;
switch(ty){
case 1: cin>>guest>>weight; c=Car(no, guest, weight); cout<<no<<' '<<c.fee()<<endl; break;
case 2: cin>>weight; t=Truck(no, weight); cout<<no<<' '<<t.fee()<<endl; break;
case 3: cin>>guest; b=Bus(no, guest); cout<<no<<' '<<b.fee()<<endl; break;
}
}
return 0;
}

 

思路:通过继承vehicle基类然后再根据费用计算方式的不同通过虚函数进行函数重载。

class Car:public Vehicle
{
public:
Car(string no,int guest,int weight):Vehicle(no) //继承基类并初始化
{
m_no=no;
m_guest=guest;
m_weight=weight;
}
virtual int fee()
{
return (m_guest*8+m_weight*2); //实现虚函数的重载
}
private:
string m_no;
int m_guest,m_weight;
};
class Truck:public Vehicle
{
public:
Truck(string no,int weight):Vehicle(no)
{

m_no=no;
m_weight=weight;

}
virtual int fee()
{
return (m_weight*5); //同上
}
private:
string m_no;
int m_weight;
};
class Bus :public Vehicle
{
public:
Bus(string no,int guest):Vehicle(no)
{

m_no=no;
m_guest=guest;

}
virtual int fee()
{
return (m_guest*3); //同上
}
private:

string m_no;
int m_guest;
};

 

标签:guest,weight,no,int,pta,c++,Vehicle,打卡,string
From: https://www.cnblogs.com/qmz-znv2/p/17327517.html

相关文章

  • C++课本第三章课后习题 3-8
    编写函数将华氏度转化为摄氏度#include<iostream>usingnamespacestd;doublefun(doublex){return5.0*(x-32)/9;}intmain(){doublea;cin>>a;cout<<fun(a)<<endl;}编写一个函数判别一个数,是不是质数,在主程序完成输入输出。#include<iostre......
  • c/c++零基础坐牢第三天
    c/c++从入门到入土(3)开始时间2023-04-17 19:07:20结束时间2023-04-17 20:53:40前言:经过三天的算法训练,大家肯定对后面的编程知识产生浓厚的兴趣,有了前两章的知识铺垫,我们今天来学习一下如何从键盘输入和屏幕输出!以下是自制思维导图参考于苏小红C语言程序设计(第四版): 作业三......
  • C++重载的奥义之运算符重载
    0、引言        重载,顾名思义从字面上理解就是重复装载,打一个不恰当的比方,你可以用一个篮子装蔬菜,也可以装水果或者其它,使用的是同一个篮子,但是可以用篮子重复装载的东西不一样。        正如在之前的文章《重载的奥义之函数重载》中介绍的类似,函数的重载是指利......
  • 4月17日打卡
    #include<bits/stdc++.h>usingnamespacestd;inta[100010];intmain(){inti,j;intN;cin>>N;for(i=0;i<N;i++){cin>>a[i];}intt=0;for(i=1;i<=N-1;i++){for(j......
  • c++打卡练习(9)
    二分法查找数据所在位置流程图:伪代码:源代码:#include<stdio.h>#defineN10intmain(){ inti,a[N]={-3,4,7,9,13,45,67,89,100,180},low=0,high=N-1,mid,k=-1,m; printf("a数组中的数据如下:\n"); for(i=0;i<N;i++) printf("%d",a[i]); printf("\n"); pr......
  • c++打卡第7天
    一、总共有五本书,分给A,B,C三个人,一人一本,问一共有几种分法。二、设计思路。①、代码大体通过for循环实现。三种书都可以是从1循环到5,并判断是否三个人分到的书编号相同,如果不同,则不成立。②、当A和B的书所分到的编号不同的话,无论c分到的是什么书都是不成立的。所以我们可以通......
  • C++ Primer Plus——第四章 复合类型
    C++PrimerPlus——第四章复合类型复合类型数组字符串结构共用体枚举拼接字符串常量C++允许拼接字符串字面值,即将两个用引号括起来的字符串合并成一个,事实上任何两个由空白(空格、制表符和换行符)分隔的字符串常量都将自动拼接成一个。另外第一个字符串末......
  • 每日打卡4.17
    一、问题描述:中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。二、设计思路:根据题意可以将解题过程分为3步(1)计算从1990年1月1日开始至指定日期共有多少天。(2)由于“打鱼”和“晒网”的周......
  • 第四天打卡
    牛顿迭代求根:#include<stdio.h>#include<math.h>intmain(){ floatsolution(floata,floatb,floatc,floatd); floata,b,c,d,x; scanf("%f%f%f%f",&a,&b,&c,&d); x=solution(a,b,c,d); printf("根为:x=%f",x);}floatsolut......
  • 打卡4
    抓交通肇事犯 #include<stdio.h>intmain(){  inti,j,k,x,flag=0;  for(i=0;i<=9;i++)  {    if(flag)    break;    for(j=0;j<=9;j++)    {      if(flag)      break;      if(i!=j) ......