错误1:68 7 [Error] no unique final overrider for 'virtual void Account::setCategory(int)' in 'CardSystem' 错误2:75 38 [Error] reference to 'm_category' is ambiguous
#include <iostream>
#include <string>
using namespace std;
// 虚基类,表示一卡通账户
class Account
{
public:
Account(string name, int id) : m_name(name), m_id(id) {}
virtual ~Account() {}
virtual void printInfo() const {
cout << "账户名:" << m_name << endl;
cout << "账户ID:" << m_id << endl;
}
virtual void setCategory(int category) = 0; // 设定类别
virtual double calculateCost(double amount) const = 0; // 计算消费额
protected:
string m_name; // 账户名
int m_id; // 账户ID
};
// 普通账户
class NormalAccount :virtual public Account
{
public:
NormalAccount(string name, int id) : Account(name, id) {}
void setCategory(int category) override {
m_category = category;
}
double calculateCost(double amount) const override {
return amount;
}
protected:
int m_category; // 账户类别
};
// 学生账户
class StudentAccount :virtual public Account
{
public:
StudentAccount(string name, int id) : Account(name, id) {}
void setCategory(int category) override {
m_category = category;
}
double calculateCost(double amount) const override {
return amount * 0.8; // 学生账户打八折
}
protected:
int m_category; // 账户类别
};
// 教师账户
class TeacherAccount : virtual public Account
{
public:
TeacherAccount(string name, int id) : Account(name, id) {}
void setCategory(int category) override {
m_category = category;
}
double calculateCost(double amount) const override {
return amount * 0.9; // 教师账户打九折
}
protected:
int m_category; // 账户类别
};
// 一卡通管理系统
class CardSystem : public NormalAccount, public StudentAccount, public TeacherAccount
{
public:
CardSystem(string name, int id) : Account(name, id), NormalAccount(name, id), StudentAccount(name, id), TeacherAccount(name, id) {}
void printInfo() const override
{
Account::printInfo();
cout << "账户类别:" << m_category << endl;
}
};
int main()
{
CardSystem card("张三", 1001);
card.setCategory(1);
double cost = card.calculateCost(100.0);
cout << "消费金额:" << cost << endl;
card.printInfo();
return 0;
}