質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1192閲覧

派生クラスを利用したソートの仕方

nigg_1513

総合スコア16

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/04/19 08:22

編集2019/04/19 09:02

実現したいこと

vs17を利用して、C++の勉強をしています。
現在派生クラスを利用するプログラムを作成中です。
その中で派生クラスを利用し、main内でソートを行う過程で、
基底クラスに、vecterコンテナを定義し、派生クラスでも利用したいです。

追記
派生クラスにおいてセットしているspeedを引き出し、ソートを行いたいです。

発生している問題

vectorコンテナを派生クラスで利用できない。
出力結果には何も出力されません。

関連コード

Human

1class Human 2{ 3public: 4 Human(); 5 6 //Setter/Getter 7 std::string GetName(); 8 void SetName(std::string _name); 9 int GetSpeed(); 10 void SetSpeed(int _speed); 11 12 bool operator<(const Human &anothor)const; 13 14private: 15 std::string name; 16 int speed; 17}; 18 19std::string Human::GetName() { 20 return this->name; 21} 22void Human::SetName(std::string _name) { 23 this->name = _name; 24} 25 26int Human::GetSpeed() { 27 return this->speed; 28} 29void Human::SetSpeed(int _speed) { 30 this -> speed = _speed; 31} 32 33bool Human::operator<(const Human &anothor)const { 34 return this->speed < anothor.speed; 35}

LastBoss

1class LastBoss : public Human 2{ 3public: 4 LastBoss(); 5}; 6 7LastBoss::LastBoss(){ 8 SetName("らすぼす"); 9 SetSpeed(15); 10}

Yuusya

1class Yuusya : public Human 2{ 3public: 4 Yuusya(); 5}; 6 7uusya::Yuusya(){ 8 SetName("ゆうしゃ"); 9 SetSpeed(20); 10}

main

1int main(){ 2 std::vector<Human> human; 3 Yuusya yuusya; 4 LastBoss lastBoss; 5 6 std::sort(human.begin(),human.end()); 7 8 for (auto itr : human) { 9 std::cout << "Speed:" << itr.GetSpeed() << " name:" << itr.GetName() << std::endl; 10 } 11 12 return 0; 13}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

実現したいこと

の文面がちょっと良くわからないのですが,
とりあえず,何も表示されないのはvectorが空だからでしょう.

投稿2019/04/19 08:51

fana

総合スコア11632

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nigg_1513

2019/04/19 09:04

回答ありがとうございます。 どのような、手法を行うとvectorに派生クラスの値を取り込むことができるでしょうか?
episteme

2019/04/19 11:31

何言ってるかわからんぞー
guest

0

ベストアンサー

継承による多態でしょうか?

c++

1class Human 2{ 3public: 4 Human(); 5 // デストラクタを仮想関数にしておかないと困る可能性がある 6 virtual ~Human(); 7 8 //Setter/Getter 9 std::string GetName(); 10 void SetName(std::string _name); 11 int GetSpeed(); 12 void SetSpeed(int _speed); 13 14 bool operator<(const Human &anothor)const; 15 16private: 17 std::string name; 18 int speed; 19}; 20 21// なかったので追加 22Human::Human(){} 23Human::~Human(){}

c++

1int main(){ 2 // ポインタで保持する 3 std::vector<Human*> human; 4 Yuusya yuusya; 5 LastBoss lastBoss; 6 7 human.push_back(&yuusya); 8 human.push_back(&lastBoss); 9 10 std::sort(human.begin(),human.end()); 11 12 for (auto itr : human) { 13 std::cout << "Speed:" << itr->GetSpeed() << " name:" << itr->GetName() << std::endl; 14 } 15 16 return 0; 17}

投稿2019/04/19 09:18

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nigg_1513

2019/04/19 09:25

回答ありがとうございます!! 無事、解決することが出来ました。 ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問