我在學習多態,這是一個小遊戲。我在這裏有一個代表性的角色角色,我想要編程,以便角色人們可以選擇戰士或弓箭手來繼續遊戲。關於C++中的多態性
#pragma once
#include <iostream>
using namespace std;
#include <string>
class Warrior;
class Archer;
class Character {
public:
Character(void);
~Character(void);
Character* creatCharacter(int choice, string CharacterName) {
if (choice == 1)
return (Character*)new Warrior(CharacterName);
if (choice == 2)
return (Character*)new Archer(CharacterName);
return NULL;
}
virtual void Skill_Cast() {};
};
class Warrior :public Character {
private:
string name;
public:
Warrior(void);
~Warrior(void);
Warrior(string CharacterName) {
name = CharacterName;
}
void Skill_Cast() {
cout << "Punch!" << endl;
}
};
class Archer : public Character
{
private:
string name;
public:
Archer(void);
~Archer(void);
Archer(string CharacterName) {
name = CharacterName;
}
void Skill_Cast() {
cout << "Shoot!" << endl;
}
};
在主要功能:
int main() {
cout <<"Enter character's name: ";
string name;
getline(cin, name, '\n');
cout <<"Enter your character class by number (1),(2),(3): ";
int choice;
cin >> choice;
Character* YourChar;
YourChar = YourChar->creatCharacter(choice, name);
YourChar->Skill_Cast();
}
這是錯誤:
Error 1 error C2512: 'Warrior' : class has no constructors
Error 2 error C2514: 'Archer' : class has no constructors
你能解釋一下我的錯誤,並幫助我解決這個問題,順便說一下,這是一個一種「抽象工廠設計模式」?非常感謝。 (對不起,因爲我的英文不好)
在聲明之前,你正在使用戰士和弓箭手。 –
'return(Character *)new Warrior(CharacterName);'是不必要的,只是說'return new Warrior(CharacterName);' 又是什麼'NhanVat'? – rlbond
在'YourChar-> creatCharacter'行上,您使用的是未初始化的指針。但是這並不能解釋錯誤信息。 – 5gon12eder