//C++继承和虚函数(具体见附件) //-----------继承--inheritance:------------ //程序1: #include using namespace std; class Person{ protected: string name;//由于是protected类型,故在子类里面可以访问 private: bool gender; public: Person(const char *a,bool g=true):name(a),gender(g){} void show() { cout<<"大家好,我是"<<(gender?"帅哥":"美女")< using namespace std; class Goods{ double price; public: Goods(double p=100):price(p){cout<<"Goods()"<>"< using namespace std; class Person{ protected: string name; private: bool gender; public: Person(const char *a,bool g=true):name(a),gender(g){} virtual void show()//虚函数 { cout<<"大家好,我是"<<(gender?"帅哥":"美女")< using namespace std; class USB{ public: virtual void recognise() { cout<<"正在识别USB..."<recognise(); p->know(); p->display(); } }; int main() { //由于父类的成员函数已经申明为虚函数(virtual),所以在调用函数时,会根据相应的子类对象而调用子类里面的成员函数 USBCamera ca; USBMP3 m; Computer c; c.use(&ca); c.use(&m); return 0; } //--------------纯虚函数:------------- //程序1: //只有用new创建对象,用delete释放对象,虚析构才起作用 //构造、析构函数没有纯虚函数 //子类一定是父类,所以可以将一个子类赋给父类,但父类不一定能够赋给子类 #include using namespace std; class Animal{ public: Animal(){} virtual ~Animal(){}//虚析构 //~Animal(){shout();} void play() { eat(); shout(); sleep(); } //纯虚函数:提供一个接口,子类覆盖它,自己实现函数的不同功能 //有纯虚函数的类,称为抽象类abstract class //补允许创建抽象类的对象 virtual void eat()=0; virtual void shout()=0; virtual void sleep()=0; }; class Horse:public Animal{ public: Horse(){cout<<"马"<>c; if(c=='h') p=new Horse; else p=new Tiger; p->play(); delete p; //Animal a;这里编译出现错误,补允许创建抽象类的对象 return 0; } //程序2: //虚函数表里存有这个类里面所有虚函数的地址 //每个类只有一个虚函数表,每个对象有一个指针指向这个虚函数表 #include using namespace std; class A{ double a; }; class B{ double b; void fun(){} }; class C{ double c; virtual void fun(){} }; class D{ double d; virtual void fun1(){} virtual void fun2(){} virtual void fun3(){} }; int main() { cout<