八十五. 父类和子类出现重名变量
#include <iostream> using namespace std; class Parent { public: Parent(int a) { this->a = a; } int getA() { return a; } int a; }; class Child: public Parent { public: Child(int p_a, int c_a): Parent(p_a) { this->a = c_a; } void print() { cout<<Parent::a<<endl; cout<<this->a <<endl; //child's a } int a; }; int main() { Child c(5,10); c.print(); return 0; }
八十六. 继承中的static
#include <iostream> using namespace std; class A { public: static int a; private: }; class B: public A { }; int A::a = 100; int main() { A a1; A a2; cout<<a1.a<<endl; cout<<a2.a<<endl; A::a = 300; cout<<a1.a<<endl; cout<<a2.a<<endl; cout<<"---------------------------"<<endl; B b1; B b2; cout<<b1.a<<endl; cout<<b2.a<<endl; return 0; } /*运行结果: 100 100 300 300 --------------------------- 300 300 这说明,就算在继承中static变量,仍然是共享的 */
八十七. 中午回顾(略)
八十八. 多继承与虚继承
#include <iostream> using namespace std; //家具类 class Furniture { public: int m;//材质 }; //将父亲类继承爷爷类时,改成虚继承,唯一目的, //是防止儿子在多继承父亲时,爷爷中的变量被拷贝多份 class Bed: virtual public Furniture { public: void Sleep() { cout<<"在床上休息"<<endl; } }; class Sofa: virtual public Furniture { public: void Sit() { cout<<"沙发上休息"<<endl; } }; //沙发床 class SofaBed: public Bed, public Sofa { public: void SleepAndSit() { Sleep(); Sit(); } }; int main() { Bed b; b.Sleep(); Sofa s; s.Sit(); SofaBed sb; //sb.m =10;//如果此处不采用虚继承的话,这里由于里面有两个m,导致访问不明确 //可以采用如下两行,但这里不符合实际,沙发床只应该有一种材质 //因此这里必须用虚继承 //sb.Bed::m =20; //sb.Sofa::m = 10; sb.m =10;//此时就只有一个m return 0; }
用虚继承的多继承情况如下图