class Attraction {
};
class Museum : public Attraction {
private:
double price;
public:
void setPrice(double Price) {
price = Price;
}
double getPrice() {
return price;
}
};
class Park : public Attraction {
public:
double getPrice() {
return 0;
}
};
class Theatre : public Attraction {
private:
double price;
public:
void setPrice(double Price) {
price = Price;
}
double getPrice() {
return price;
}
};
int _tmain(int argc, _TCHAR* argv[]) {
vector<Attraction> attraction;
vector<Attraction>::iterator i;
for (i = attraction.begin(); i != attraction.end(); i++) {
if (i->getPrice() < 5) {
cout << endl;
}
}
}
-3
A
答えて
2
vector<Attraction>
はオブジェクトのスライスを実行するため、派生クラスのgetPrice()
にアクセスすることはできません。代わりにAttraction
クラスに仮想double GetPrice()
メソッドがある多態性を使用し、vector<Attraction*>
とnew
/delete
をオブジェクトに使用する必要があります。 Attraction
でデストラクタを作成することを忘れないでください。delete
ベースポインタを使用して子孫オブジェクトを作成することができます。
2
表示しているコードでは、実行しようとしていることはできません。あなたは多型を正しく利用していません。
は代わりにもっとこのような何かを試してみてください:
class Attraction
{
public:
Attraction() {}
virtual ~Attraction() {}
virtual double getPrice(double Price)
{
return 0.0;
}
};
class PriceyAttraction : public Attraction
{
private:
double price;
public
PriceyAttraction(double Price = 0.0) : Attraction(), price(Price) {}
virtual double getPrice()
{
return price;
}
void setPrice(double Price)
{
price = Price;
}
};
class Museum : public PriceyAttraction
{
public:
Museum(double Price = 0.0) : PriceyAttraction(Price) {}
};
class Park : public Attraction
{
public:
Park() : Attraction() {}
};
class Theatre : public PriceyAttraction
{
public:
Theatre(double Price = 0.0) : PriceyAttraction(Price) {}
};
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<Attraction*> attraction;
attraction.push_back(new Museum(5.00));
attraction.push_back(new Park);
attraction.push_back(new Theatre(7.50));
std::vector<Attraction*>::iterator i;
for (i = attraction.begin(); i != attraction.end(); ++i)
{
std::cout << i->getPrice() << std::endl;
//...
}
for (i = attraction.begin(); i != attraction.end(); ++i)
{
delete *i;
}
}
を使用すると、C++ 11以降を使用している場合、あなたはあなたのためのオブジェクトの割り当て解除を管理するためにstd::unique_ptr
を使用することができます。
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<std::unique_ptr<Attraction>> attraction;
attraction.emplace_back(new Museum(5.00));
attraction.emplace_back(new Park);
attraction.emplace_back(new Theatre(7.50));
/* or:
attraction.push_back(std::unique_ptr<Attraction>(new Museum(5.00)));
attraction.push_back(std::unique_ptr<Attraction>(new Park));
attraction.push_back(std::unique_ptr<Attraction>(new Theatre(7.50)));
*/
/* or:
attraction.push_back(std::make_unique<Museum>(5.00));
attraction.push_back(std::make_unique<Park>());
attraction.push_back(std::make_unique<Theatre>(7.50));
*/
vector<Attraction>::iterator i;
for (i = attraction.begin(); i != attraction.end(); ++i)
{
std::cout << (*i)->getPrice() << std::endl;
//...
}
}
関連する問題
- 1. さまざまなフロントエンドインスタンスタイプの価格はどこで確認できますか?
- 2. 各ユーザーのランクはどのようにして確認できますか?
- 3. phpでAmazon Productの価格をどのように取得できますか?
- 4. 各価格層の価格増分
- 5. MySQLでどの価格帯に価格帯が含まれているかどうかを確認するには?
- 6. どのようにして価格を計算しますか?
- 7. はどのように確認できますか?
- 8. 製品にカスタムオプションがあり、価格の横にテキストを表示するかどうかを確認する
- 9. 低価格と低価格と高価格と低価格とをどのように並べ替えるのですか?
- 10. ワトソン視認価格/原価計算の明確化
- 11. リピータの合計価格を確認するには
- 12. ASP.NET MVC |どのようにパスワードを確認する価値を扱う?
- 13. iOS App Storeでアプリの正確な評価を確認するにはどうすればよいですか?
- 14. Discordでロボットとの役割をどのように確認できますか?
- 15. どのようにasp.net C#でウイルススキャンの結果を確認できますか?
- 16. 各請求書の価格を取得するにはどうすればよいですか?
- 17. Springブートはサブクラスのメソッドで@Scheduledをどのように認識しますか?
- 18. TFSのバージョンの変更をどのように確認できますか?
- 19. リベースの残量をどのように確認できますか?
- 20. Delphiどのようにしてcportのステータスを確認できますか?
- 21. Githubでファイル権限をどのように確認できますか?
- 22. Javaを使用してティアプライス/ボリュームの価格を確認する
- 23. 特定のNSStringがNSArrayに存在するかどうかをどのように確認できますか?
- 24. FirebaseにログインせずにEmail/Passの資格情報が有効かどうかを確認できますか?
- 25. Berkeley DB(Perl)のキーの数はどのように確認できますか?
- 26. このクエリはどのように評価できますか?
- 27. iPadにプログラムでWiFi接続があるかどうかをどのように確認できますか?
- 28. どのようにvimがコンパイルされたオプションを確認できますか?
- 29. Bcrypt、どのようにランダムな塩で確認しますか?
- 30. UIViewControllerサブクラスのインスタンスが存在するかどうかを確認する
することができます」あなたがそれを設計したやり方で。 'Attraction'には' getPrice'メソッドがありません – smac89
@khredos:それは主な問題ではありません(理論的には静的な訪問者を持つことができます)。 – lorro
短い答えは - そうではありません。しかし、「正しい方法」は、ユースケースの詳細に依存します。 'unique_ptr'のベクトルが必要な場合は、' ptr_vector'が必要です。まったく別のものが欲しいかもしれません。たとえば、コレクションに対処する場合、どのようなセマンティクスが必要ですか? –