c++のvirtual関数および継承について
以下のプログラムで間違っている部分が分かる方、ご指摘お願い致します。
私の稚拙な腕では、どこが間違っているのかさっぱり分かりません。
以下のプログラムは、クラスticketを継承して、airplaneTicket、cinemaTicketを作成し、チケットの情報を入力し、最後に出力するものです。コンパイルエラーの箇所はコメントアウトしておきました。メイン関数の中に計5箇所あります。
よろしくお願い致します。
#include<string>
#include<iostream>
#include<vector>
using namespace std;
class ticket{
public:
string ID;
string seat;
int price;
ticket(){
cout << "ticket default constructor" << endl;
ID="not Known"; seat="not Known";
}
ticket(string i, string t){
cout << "ticket parameter-constructor" << endl;
ID=i; seat=t;
}
virtual void setPrice(int p)=0;
void printInfo(){
cout << ID << " " << seat << endl;
}
};
class airplaneTicket: public ticket{
public:
string flight;
airplaneTicket(){
cout << "airplane default constructor" << endl;
flight="not known yet";
}
airplaneTicket(string i, string t, string f):ticket(i, t){
cout << "airplane parameter-constructor" << endl;
flight=f;
}
virtual void setPrice(int p){
string type;
cout << "enter class type: ";
cin >> type;
if(type=="business") price=p*2;
else price=p;
}
void priceInfo(){
cout << ID << " " << seat << " " << price << " " << flight << endl;
}
};
class cinemaTicket: public ticket{
public:
cinemaTicket(){
cout << "cinema default constructor" << endl;
}
cinemaTicket(string i, string t):ticket(i, t){
cout << "cinema parameter-constructor" << endl;
}
};
int main(){
ticket tList[100]; //error: invalid abstract type 'ticket' for 'tList'
tList[0]=new airplaneTicket("239", "d34", "f345"); //error: no match for 'operator=' in 'tList[0]
tList[1]=new airplaneTicket(); // error: no match for 'operator=' in 'tList[1]
tList[2]=new cinemaTicket("245", "a23"); //error: cannot allocate an object of abstract type 'cinemaTicket'
tList[3]=new cinemaTicket(); // error: cannot allocate an object of abstract type 'cinemaTicket
for(int i=0;i<4; i++){
tList[i].printInfo();
}
return 1;
}
お礼
直ぐに、そして丁寧に教えて下さり本当にありがとうございます。 もうチケットは発券済みだったのですね!控えとパスポートを持って空港に向かいたいと思います。 これで安心して帰国する事が出来ます、ありがとうございました!