ShinyGoldenCock 2022-12-01 01:47 采纳率: 0%
浏览 10

C++primer类继承例题复现

初学C++时想复现C++primer13章中关于类继承的例题,总体上与书中代码相同,但自己加了一个set的文件来替代直接调用构造函数初始化,但发生了错误,结果没有执行set函数,显示输入存款后也直接终止程序了
感谢大家,头文件和实现如下:

用代码块功能插入代码,请勿粘贴截图
#ifndef BASS_H
#define BASS_H
#include<iostream>
#include<string>
class bass
{
private:
    std::string name;
    int count;
    double balance;
public:
    bass();
    bass(std::string &s,int c,double b);
    virtual ~bass();
    virtual void set();
    void deposit(double m);
    virtual void draw(double m);
    double Balance()const;
    virtual void show()const;
};
class bassp:public bass
{
private:
    double rate;
    double max;
    double owe;
public:
    bassp();
    bassp(std::string &s,int n,double b,double r=0.1,double m=500);
    bassp(bass &b,double r=0.1,double m=500);
    virtual void draw(double m);
    virtual void show()const;
    virtual void set();
};
#endif
#include<iostream>
#include"bass.h"
    bass::bass()
    {
        name="none";
        count=0;
        balance=0.0;
    }
    bass::bass(std::string &s,int c,double b)
    {
        name=s;
        count=c;
        balance=b;
    }
    bass::~bass()
    {
    }
    void bass::set()
    {
        std::cout<<"姓名";
        getline(std::cin,name);
        std::cout<<"账户";
        std::cin>>count;
        std::cout<<"余额";
        std::cin>>balance;
    }
    void bass::deposit(double m)
    {
        balance+=m;
    }
    void bass::draw(double m)
    {
        if(m>balance)
            std::cout<<"?"<<std::endl;
        else
            balance-=m;
        std::cout<<"done"<<std::endl;
    }
    double bass::Balance()const
    {
        return balance;
    }
    void bass::show()const
    {
        std::cout<<name<<std::endl;
        std::cout<<count<<std::endl;
        std::cout<<balance<<std::endl;
    }
    bassp::bassp():bass()
    {
    }
    bassp::bassp(std::string &s,int n,double b,double r,double m):bass(s,n,b)
    {
        rate=r;
        max=m;
        owe=0.0;
    }
    bassp::bassp(bass &b,double r,double m):bass(b)
    {
        rate=r;
        max=m;
    }
    void bassp::draw(double m)
    {
        double bal=Balance();
        if(m<bal)
            bass::draw(m);
        else if(m<bal+max-owe)
        {
            double temp;
            temp=m-bal;
            bass::deposit(temp);
            bass::draw(temp);
            owe+=temp*(1+rate);
        }
        else
            std::cout<<"NO!";
    }
    void bassp::show()const
    {
        bass::show();
        std::cout<<rate<<std::endl;
        std::cout<<max<<std::endl;
        std::cout<<owe<<std::endl;
    }
    void bassp::set()
    {
        bass::set();
        std::cout<<"费率";
        std::cin>>rate;
        std::cout<<"上限";
        std::cin>>max;
    }
#include<iostream>
#include<string>
#include"bass.h"
int main()
{
    bass *p[2];
    std::string NAME;
    double N;
    double M;
    for(int i=0;i<2;i++)
    {
        int j=0;
        std::cout<<"选择客户类型:1普通,2vip\n";
        std::cin>>j;
        if(j=='1')
        {
            p[i]=new bass();
            p[i]->set();
        }
        else if(j=='2')
        {
            p[i]=new bassp();
            p[i]->set();
        }
            std::cout<<"存款数量:";
            std::cin>>N;
            p[i]->deposit(N);
            std::cout<<"取款数量:";
            std::cin>>M;
            p[i]->draw(M);
    }
    std::cout<<"\n"<<"\n"<<"\n";
    for(int i=0;i<2;i++)
    {
            p[i]->show();
            std::cout<<std::endl;
    }
    return 0;
}
运行结果及报错内容

结果没有执行set函数,显示输入存款后也直接终止程序了

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-12-01 04:02
    关注
    评论

报告相同问题?

问题事件

  • 创建了问题 12月1日

悬赏问题

  • ¥30 计算机硬件实验报告寻代
  • ¥15 51单片机写代码,要求是图片上的要求,请大家积极参与,设计一个时钟,时间从12:00开始计时,液晶屏第一行显示time,第二行显示时间
  • ¥15 用C语言判断命题逻辑关系
  • ¥15 原子操作+O3编译,程序挂住
  • ¥15 使用STM32F103C6微控制器设计两个从0到F计数的一位数计数器(数字),同时,有一个控制按钮,可以选择哪个计数器工作:需要两个七段显示器和一个按钮。
  • ¥15 在yolo1到yolo11网络模型中,具体有哪些模型可以用作图像分类?
  • ¥15 AD9910输出波形向上偏移,波谷不为0V
  • ¥15 淘宝自动下单XPath自动点击插件无法点击特定<span>元素,如何解决?
  • ¥15 曙光1620-g30服务器安装硬盘后 看不到硬盘
  • ¥15 抖音直播广场scheme