八十五. 父类和子类出现重名变量
#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;
}
用虚继承的多继承情况如下图