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
, 9449 阅读
相信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了。
2010年9月22日 08:12
什么错误?它们只是代码规范需要的不同而已。。。
2010年9月25日 01:44
@YOU ARE (NOT) ALONE: 已经查实,事实上是Eclipse的编译前根本没有保存文件造成无法编译的。我现在已经把编译前自动保存功能打开了。
2010年11月18日 20:33
刚刚学c++,发现如果是private和protected的继承,子类对象不能以指针和引用作为父类指针引用出现,上面的写法也不能作为多态的应用,感觉组合还好一些。