想变强的小白sky 2021-06-08 15:01 采纳率: 0%
浏览 3797

不允许使用抽象类对象 纯虚函数没有强制代替项?

#include<bits/stdc++.h>
using namespace std;

class Customer {
protected:
	string gender;
public:
	virtual double calculateCost() = 0;
};

class AdultCustomer:public Customer {
public:
	AdultCustomer(string s) {
		this->gender = s;
	}

	double calculateCost(char set) {
        double sum = 0;
		if (gender == "male") {
			switch (set) {
			    case 'A':sum = 100 + 15; break;
				case 'B':sum = 120 + 120 * 0.15; break;
				case 'C':sum = 150 + 150 * 0.15; break;
			}
		}
		else {
			switch (set) {
			    case 'A':sum = 100*0.9 + 15; break;
			    case 'B':sum = 120*0.9 + 120 * 0.15; break;
			    case 'C':sum = 150*0.9 + 150 * 0.15; break;
			}
		}
		return sum;
	}
};

class ElderlyCustomer :public Customer {
public:
	ElderlyCustomer(string s) {
		this->gender = s;
	}

	double calculateCost(char set) {
		double sum = 0;
		switch (set) {
		    case 'A':sum = 100 * 0.85 + 100 * 0.1;
			case 'B':sum = 120 * 0.85 + 120 * 0.1;
			case 'C':sum = 150 * 0.85 + 150 * 0.1;
		}
		return sum;
	}
};

class UnderAgeCustomer :public Customer {
public:
	UnderAgeCustomer(string s) {
		this->gender = s;
	}

	double calculateCost(char set) {
		double sum = 0;
		switch (set) {
		    case 'A':sum = 100 * 0.7;
		    case 'B':sum = 120 * 0.7;
		    case 'C':sum = 150 * 0.7;
		}
		return sum;
	}
};

int main() {
	AdultCustomer c1("male");
	AdultCustomer c2("female");
	ElderlyCustomer c3("male");
	UnderAgeCustomer c4("female");
	Customer* p;
	char set1, set2, set3, set4;
	cin >> set1 >> set2 >> set3 >> set4;
	p = &c1;
	cout << p->calculateCost(set1) << endl;
	p = &c2;
	cout << p->calculateCost(set2) << endl;
	p = &c3;
	cout << p->calculateCost(set3) << endl;
	p = &c4;
	cout << p->calculateCost(set4) << endl;
	return 0;
}

为什么创建的类vs显示的为基类而不是派生类?

  • 写回答

7条回答 默认 最新

  • qfl_sdu 2021-06-08 15:11
    关注

    Customer类中声明的虚函数是double calculateCost(),但是子类中没有实现这个函数,而是重写了一个double calculateCost(char) 函数,要么把Customer类中的虚函数加上参数类型char,要么就在子类中实现以下这个无参虚函数。

    Customer类修改如下:

    class Customer {
    protected:
    	string gender;
    public:
    	virtual double calculateCost(char ) = 0;
    };
    评论

报告相同问题?

悬赏问题

  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊
  • ¥15 求多普勒频移瞬时表达式
  • ¥15 如果要做一个老年人平板有哪些需求