2017C++基础——网课笔记(85到88)

八十五. 父类和子类出现重名变量

#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;
}


一般情况的,不用虚继承的多继承情况如下图

用虚继承的多继承情况如下图

猜你喜欢

转载自blog.csdn.net/garrulousabyss/article/details/80247764