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

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

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

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

C++

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

Q&A

解決済

1回答

515閲覧

派生クラスにおいて変更したデータメンバを、基底クラスのGetterにより取得する方法がわかりません

nigg_1513

総合スコア16

継承

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

C++

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

0グッド

0クリップ

投稿2019/04/17 12:45

前提・実現したいこと

VisualStudioを用いたc++のプログラミング学習。
原因がわからないため、多量のソースコードを掲載してしまいました。

###問題点
出力値をLastBossで入力した値にしたいのですが、Humanで入力した値のみ出力されます。派生クラスで定義したデータメンバを参照出来ていないと考えています。
継承を利用し、基底クラスで定義したGetter/Setterを利用した上で解決できますでしょうか?

発生している問題・エラーメッセージ

出力結果

0 は 30のダメージをうけた

該当のソースコード

Human

1class Human 2{ 3public: 4 Human(); 5 ~Human(); 6 //Setter/Getter 7 std::string GetName(); 8 void SetName(std::string _name); 9 int GetVitality(); 10 void SetVitality(int _vitality); 11private: 12 int vitality; 13}; 14Human::Human() { 15 vitality = 0; 16} 17std::string Human::GetName() { 18 return this->name; 19} 20void Human::SetName(std::string _name) { 21 this->name = _name; 22} 23int Human::GetVitality() { 24 return this->vitality; 25} 26void Human::SetVitality(int _vitality) { 27 this->vitality = _vitality; 28} 29

Yuusya

1class Yuusya : public Human 2{ 3public: 4 Yuusya(); 5 ~Yuusya(); 6private: 7 Human _super; 8}; 9Yuusya::Yuusya(){ 10 _super.SetName("ゆうしゃ"); 11 _super.SetVitality(100); 12}

LastBoss

1class LastBoss : public Human 2{ 3public: 4 LastBoss(); 5 ~LastBoss(); 6 7private: 8 Human _super; 9}; 10 11LastBoss::LastBoss(){ 12 _super.SetName("らすぼす"); 13 _super.SetVitality(500); 14} 15LastBoss::~LastBoss(){} 16 17void LastBoss::SpecialEvilAttack(Human target) { 18 target.SetVitality(target.GetVitality() - 30); 19 std::cout << target.GetName() << " は 30 のダメージをうけた" << std::endl; 20} 21

C++

1int main(){ 2 LastBoss lastBoss; 3 4 std::cout << lastBoss.GetMagic() << std::endl; 5 lastBoss.SpecialEvilAttack(yuusya); 6 7 return 0; 8}

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

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

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

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

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

guest

回答1

0

ベストアンサー

C++

1class Yuusya : public Human { 2public: 3 Yuusya(); 4 ~Yuusya(); 5private: 6 Human _super; 7}; 8 9Yuusya::Yuusya(){ 10 _super.SetName("ゆうしゃ"); 11 _super.SetVitality(100); 12}

これ↑はおかしいだろどう考えても。こう↓したかったんかな?

C++

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

投稿2019/04/17 12:49

episteme

総合スコア16614

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

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

nigg_1513

2019/04/17 13:06

解決致しました。ありがとうございます。 解決と同時に、プログラム理解が不十分であると改めて認識出来ました。 これからも精進して参ります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問