标签:
首先看下下面这个例子:
class Base{ private: int x; public: virtual void mf1() = 0; virtual void mf2(); void mf3(); ... }; class Derived : public Base{ public: virtual void mf1(); void mf4(); ... };
1 class Base{ 2 private: 3 int x; 4 public: 5 virtual void mf1() = 0; 6 virtual void mf1(int); 7 virtual void mf2(); 8 void mf3(); 9 void mf3(double); 10 ... 11 }; 12 class Derived : public Base{ 13 public: 14 virtual void mf1(); 15 void mf3(); 16 void mf4(); 17 ... 18 };
1 class Base{ 2 private: 3 int x; 4 public: 5 virtual void mf1() = 0; 6 virtual void mf1(int); 7 virtual void mf2(); 8 void mf3(); 9 void mf3(double); 10 ... 11 }; 12 class Derived : public Base{ 13 public: 14 using Base::mf1; 15 using Base::mf3; 16 virtual void mf1(); 17 void mf3(); 18 void mf4(); 19 ... 20 };
然而可能有时候不希望集成基类中的所有函数,这时候就应该注意了,应为public提供的is-a的关系,所以说如果一旦不希望继承基类中的所有的函数,那么可能public集成并不是真正我们希望用到的关系,正如一个矩形与一个正方形之间的关系一样。这种只想继承一部分函数的欲望在私有继承制之下是可以得到满足的,例如下面这样:(不过要用到一点技巧)
1 public: 2 virtual void mf1() = 0; 3 virtual void mf1(int); 4 ... 5 }; 6 class Derived: private Base{ 7 public: 8 virtual void mf1(){ // 注意这里只能使用这种形式进行函数的转接,使用类似前面的类似的using声明达不到相同的结果。 9 Base::mf1(); 10 }//转交函数。 11 };
标签:
原文地址:http://www.cnblogs.com/-wang-cheng/p/4889762.html