初学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函数,显示输入存款后也直接终止程序了