下のソースコードのクラスの継承についてわからないことがあったので質問させていただきました。
まず基底クラス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}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/14 10:37