关于C execlp函数的理解

C++中Protected与Private继承的作用

bachue posted @ 2010年9月21日 22:15 in C/C++ with tags c c++ Eclipse public private protected inherit Microsoft Visual Studio cdt deltamaster , 6996 阅读

相信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了。

YOU ARE (NOT) ALONE 说:
2010年9月22日 08:12

什么错误?它们只是代码规范需要的不同而已。。。

Avatar_small
bachue 说:
2010年9月25日 01:44

@YOU ARE (NOT) ALONE: 已经查实,事实上是Eclipse的编译前根本没有保存文件造成无法编译的。我现在已经把编译前自动保存功能打开了。

ahujyy 说:
2010年11月18日 20:33

刚刚学c++,发现如果是private和protected的继承,子类对象不能以指针和引用作为父类指针引用出现,上面的写法也不能作为多态的应用,感觉组合还好一些。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter