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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

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

Q&A

解決済

1回答

441閲覧

関数の引数について(基底構造体)

hiru.jp

総合スコア11

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

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

0グッド

1クリップ

投稿2020/08/14 07:34

下のソースコードのクラスの継承についてわからないことがあったので質問させていただきました。

まず基底クラスAnimalを作成
Animalクラスの派生クラスDogを作成
派生クラス内で新たに[int c,d,e,f]を追加  ...①
派生クラス内でspeak関数を上書き

main関数でDog型pochi変数定義[Dog pochi("ポチ");]
作成したsub関数にpochi変数を引数として渡してあげる

という流れなのですが。
なぜ、sub関数の定義では基底クラスのAnimalを指定しているのに、派生クラスのDogが引数として渡せるのでしょうか?

関数の引数は値が同じでなければいけないはずだと思うのですが、
①で新たに派生クラスに値を追加してしまったのに、なぜAnimalクラスとして認識されているのでしょうか?

これは基底クラスだからこそなせるわざなのでしょうか?

どなたか教えていただければ幸いです<(_ _)>

C++

1#include <iostream> 2#include <string> 3using namespace std; 4 5class Animal { 6protected: 7 string name; 8public: 9 virtual void speak() = 0; 10 Animal(string name); 11}; 12 13Animal::Animal(string name) { 14 this->name = name; 15} 16 17class Dog : public Animal { 18public: 19 int c, d, e, f; 20 void speak(); 21 Dog(string name); 22}; 23 24void Dog::speak() { 25 cout << this->name << ":ワン!" << endl; 26} 27 28Dog::Dog(string name) : Animal(name) { 29} 30 31void sub(Animal* p) { 32 p->speak(); 33} 34 35int main() { 36 Dog pochi("ポチ"); 37 sub(&pochi); 38 39 return 0; 40}

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

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

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

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

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

guest

回答1

0

ベストアンサー

Dogクラスは、Animalクラスの派生クラスです。

派生クラスということは、DogクラスがAnimalクラスを継承している(Animalクラスとしての性質も持っている)という事です。

引数がAnimalクラスのオブジェクトなのだとしたら、そこにDocクラスのオブジェクトが入っても問題ありません。
DocクラスはAnimalクラスの派生クラスだから、DocクラスのオブジェクトはAnimalクラスのオブジェクトでもあるからです。

現実の世界に戻りましょう。
犬は、動物ですよね? (犬は、動物の種類のひとつ)
猫も、動物ですよね? (猫は、動物の種類のひとつ)

だから、犬でも、猫でも、動物病院で治療してもらえる。

投稿2020/08/14 08:22

coco_bauer

総合スコア6915

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

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

hiru.jp

2020/08/14 10:37

clcl_bauerさんご返答ありがとうございます そんなもんなんですね! いろいろとありがとうございました。(>_<)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問