#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
class Animal
{
public:
Animal(string name);
void Eat();
string GetName();
private:
string _name;
};
class Fish :public Animal //派生类拥有基类的所有成员
{
public:
Fish(string name);
void Swim();
};
Animal::Animal(string name):_name(name)
{
}
void Animal::Eat()
{
cout << _name << "正在吃东西" << endl;
}
string Animal::GetName()
{
return _name;
}
Fish::Fish(string name):Animal(name) //用Animal的构造函数来初始化Fish的name
{
}
void Fish::Swim()
{
//cout << _name << endl; 错误
//由于_name是基类的私有成员,派生类不能访问,所以用GetName()返回的是鱼的名字
cout << GetName() << "正在游泳" << endl;
}
int main()
{
Animal* allAnimals[10]; //父类指针数组
allAnimals[0] = new Fish("大鱼"); //父类指针指向子类对象
allAnimals[0]->Eat();
return 0;
}
容易错的点:
子类和父类都需要定义各自的构造函数
Fish::Fish(string name):Animal(name) //用父类的构造函数初始化
cout << GetName() << "正在游泳" << endl;
//由于_name是基类的私有成员,派生类不能访问,所以用GetName()返回的是鱼的名字