eg1:解决方法:添加作用域标识符,消除成员限定的二义性
#include <iostream>
 #include<iostream>
 #include<vector>
 using namespace std;
 class A {
 public:
     void f() 
     {
         cout << "A::f()" << endl;
     }
 };
class B {
 public:
     void f()
     {
         cout << "B::f()" << endl;
     }
     void g();
 };
class C : public A, public B 
 {
 public:
     void g();
     void h();
     void f() {
         A::f();
     }
 };
 int main()
 {
     C C1;
     C1.f();
     return 0;
 }
eg2:解决方法:C++中虚继承:使派生类只保留一份间接基类成员
class A //间接基类,第一层的类
 {
 protected:
     int m_a;
 };
class B :virtual public A //直接基类B
 {
 protected:
     int m_b;
     //继承m_a;
 };
class C :virtual public A //直接基类C
 {
 protected:
     int m_c;
 };
class D :public C, public B
 {
 public:
     void set(int a)
     {
         //继承m_a;
           //error:  m_a=a;
         //不知道赋值给B 类的还是C类的m_a;
         m_a = a;
         //B::m_a = a;
         //C::m_a = a;
     }
 };
 int main()
 {
     return 0;
 }
egg:解决方法:C++中虚继承:使派生类只保留一份间接基类成员
//多重继承 虚继承
 #include <iostream>
 #include <string>
 using namespace std;
class A
 {
 public:
     int m_a;
 };
class B :virtual public A
 {
 public:
     int m_b;
     //虚继承 m_a
 };
class C :virtual public A
 {
 public:
     int m_c;
     //虚继承 m_a
 };
class D :virtual public A
 {
 public:
     int m_d;
     //虚继承 m_a
 };
 class E :public C, public B
 {
 public:
     int m_e;
     //虚继承 m_a
     //继承 m_b
     //继承 m_c
     void seta(int a) { m_a = a; }//正确
     void setb(int b) { m_b = b; }//正确
     void setc(int c) { m_c = c; }//正确
     void sete(int e) { m_e = e; }//正确
 };
int main()
 {
     E e;
     return 0;
 }