#include #include using namespace std; class Animal { protected: std::string name; public: Animal(std::string n) : name(n) {} virtual void speak(); // virtual const void speak() = 0; }; // Animal::Animal(string n) :name(n) // 初始化成员属性 // { // // 等价于 name = n; // } void Animal::speak() { cout << name << endl; } // 继承多个父类,使用 , 分隔;即多重派生类(Multiple inheritance) class Cow : public Animal { public: int age; public: Cow(std::string n, int a=1) : Animal(n), age(a) {} void speak(); }; // 派生类的构造函数仅描述它自己属性和其直接基类的初始值,只能使用父类的构造函数初始化父类的属性 // Cow::Cow(string n, int a) :Animal(n), age(a) { // } void Cow::speak() { cout << "age is " << age << endl; Animal::speak(); } int main() { Cow x("zhangsi", 2); x.speak(); Animal y("lisi"); y.speak(); Animal *p = &x; p->speak(); Animal* pp[10]; int num = 0; // Animal* as[100]; }