相信C++中Private和Protected继承是最冷门的语法之一吧,以至于以后大多数以C++语法作为模板的语言都没有继承这个语法。我C++学的不算差,学完后几乎每学期都在使用,但是也把这个语法点忘的差不多了。不过今天在和Deltamaster讨论C++如何选择性继承的时候(只继承一部分接口,另一部分接口不继承,如果用户去使用这些不被继承的接口,必须在编译期间报错),他提出了用Protected或Private继承的思想。实现如下:

#include<iostream>
class Parent
{
public:
	void get()
	{
		std::cout << "get" << std::endl;
	}
	void set()
	{
		std::cout << "set" << std::endl;
	}
};
class Child:protected/*private*/ Parent
{
public:
	void get()
	{
		Parent::get();
	}
};
int main()
{
	Child c;
	c.get();
	//c.set();
	system("pause");
	return 0;
}

允许子类继承父类的get方法,而不继承set方法,就是先让子类Protected(或Private)继承父类,使父类所有接口在子类中一律为Protected(或Private),然后重写一个Public的get方法,在其中调用父类的get方法即可,这样就可以做到正常调用子类继承自父类的get方法,而如果调用子类继承自父类的set方法就会编译出错。

以上代码是在Microsoft Visual Studio 2010编写并编译的,本来想在Linux下用Eclipse写,但总感觉CDT有BUG,编译通不过,所以还是在Visual Studio下写。下次装Eclipse再也不装CDT了。