多形になっています。私は機能を呼び出すときにベクトルに問題があります。これは私のコードです:2クラス継承のベクトルで呼び出し関数
Class Customer:
#pragma once
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class Customer
{
protected:
string id;
float money;
public:
Customer();
~Customer();
virtual void Input();
virtual void Output();
string GetId()
{
return id;
}
void SetId(string ID)
{
id = ID;
}
};
クラスLoyalCustomer:
#pragma once
#include"Customer.h"
class LoyalCustomer:public Customer
{
int level; //level of relationship
public:
LoyalCustomer();
~LoyalCustomer();
void Input();
void Output();
};
RegularCustomer:
#pragma once
class RegularCustomer:public Customer
{
public:
RegularCustomer();
~RegularCustomer();
void Input();
void Output();
};
クラススーパーマーケット:
#pragma once
#include"LoyalCustomer.h"
#include"RegularCustomer.h"
class SuperMarket
{
vector<Customer*> list;
public:
SuperMarket();
~SuperMarket();
void FindCustomer()
{
string ID;
cout << "Input id of customer: ";
cin >> ID;
for (int i = 0; i<list.size(); i++)
if (ID == list[i]->GetId())
{
//do something
}
}
void Input()
{
string ID;
cout << "Input id of customer: ";
cin >> ID;
Customer *p = NULL;
if (ID[0] == 'L')
{
p = new LoyalCustomer;
p->Input();
p->SetId(ID);
list.push_back(p);
}
if (ID[0] == 'R')
{
p = new RegularCustomer;
p->Input();
p->SetId(ID);
list.push_back(p);
}
}
void Output()
{
//printf customer
}
};
私はFindCustomerでのgetId()関数を呼び出します()関数は、if(ID = = list [i] - > GetId())を実行してコードを実行すると、プログラムはエラーを通知しませんが、 "ID"を入力すると見つかりません。私はそれを修正する方法を知らない。私を助けてください。ありがとう!
プログラムのような文字列を比較してみ右実行していますか?リストが空でないことを確認しましたか? – Sean83
IDの設定者ではなく、IDをコンストラクタのパラメータとして使用することを検討してください。 – user4581301
問題をより明確に記述してください。それはうまくいかない、どう?何も返されないか、比較に問題がありますか?デストラクタも仮想でなければなりません。 LoyalCustomer/RegularCustomerの入力/出力機能は、カスタマの入力/出力機能を浅くすることによって継承のルールを破ります。それは仮想キーワードによって基本クラスの仮想を上書きする必要があります。また、私は顧客の中でこれらの機能の本体が見えなかったのですが、なぜそれらを純粋な仮想に設定しないのですか? –