Makefile
-
-
- SOURCE=$(wildcard ./*.cpp)
- OBJ=$(patsubst %.o,%.cpp,$(SOURCE))
-
- main:$(OBJ)
- g++ $(OBJ) -g -o main
main.cpp
- #include"iostream"
- #include"Animal.h"
- using namespace std ;
-
- // test函数,需要一个animal类的地址
- void test(Animal *animal)
- {
- // 执行animal的行为
- animal->speak();
- }
- int main()
- {
- // 一个动物类指针保存了一个dog的地址,dog指向这个Dog类地址。
- Animal *dog = new Dog("Chanby");
-
- test(dog);
-
- Animal *cat = new Cat("Kikey");
-
- test(cat);
-
- // animal指针指向的地址进行释放。
-
- delete dog;
- delete cat;
-
- return 0;
- }
Animal.h
- #include"iostream"
- #include"string"
- using namespace std ;
-
- // 这是一个Animal类。
- class Animal{
-
- protected:
- // 动物名字属性。
- string name;
- public:
- // 动物说话的行为指针,目前指向的地址为0;(vfptr)
- virtual void speak()=0;
- };
-
- // dog类继承animal类的保护和公共权限的行为和属性。
- class Dog:public Animal{
- public:
- // dog的构造函数,初始化 name 这个属性。
- Dog(string name)
- {
-
- this->name=name;
- // 父类中name是protected权限,但继承后是private权限。
-
- }
- // 多态,重写父类的speak函数,(把speak的地址给到父类的 virtual void speak()= void speak())
- void speak();
- };
-
- class Cat:public Animal{
- public:
- Cat(string name)
- {
- this->name=name;
- }
- void speak();
- };
Animal.cpp
- #include"Animal.h"
- #include"iostream"
- #include"string"
- using namespace std ;
-
- // dog函数中的speak行为。
- void Dog::speak()
- {
- // this指向的是dog类。
- cout<<this->name+" is barball"<<endl;
- }
- void Cat::speak()
- {
-
- cout<<this->name+" is miaomiao"<<endl;
- }