求助,在dev c++中报错(具体错误在帖中)
  • 板块学术版
  • 楼主GOODSSouth
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/12/5 17:57
  • 上次更新2023/12/5 20:27:01
查看原帖
求助,在dev c++中报错(具体错误在帖中)
983920
GOODSSouth楼主2023/12/5 17:57

错误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;
}
2023/12/5 17:57
加载中...