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

#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显示的为基类而不是派生类?

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

Customer类修改如下:

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

 

好像是你的纯虚函数参数不一致吧,父类的纯虚函数和子类的参数需要一致才行,不然就被认为是重载了

我懂了,原来是纯虚函数头部在派生类里面不一样,与基类的

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

父类和子类的参数不一致

子类中的纯虚函数没有实现