public,private,protected
类的private和protected成员,在类外是不可以使用的.只有public成员可以在类外直接使用
class A { public: int a; protected: int b; private: int c; }; int _tmain(int argc, _TCHAR* argv[]) { A a; a.a; a.b; error a.c; error }
1. public继承
从语义角度上来说,public继承是一种接口继承(可以理解为子类对象可以调用父类的接口,也就有可能实现多态了)
从语法角度上来说,public继承后,关系见上图。很明显父类public成员在子类中仍然是public,所以子类对象可以调用父类的接口
2. protected继承
从语义角度上来说,protected继承是一种实现继承
从语法角度上来说,protected继承后,父类public和protected成员都变成子类的protected成员了,也就是说子类对象无法调用父类的接口,只能将父类的函数当作子类的内部实现
3. private继承
从语义角度上来说,private继承是一种实现继承
从语法角度上来说,private继承后,父类public和protected成员都变成子类的private了,它比protected继承更严格。也就说这些父类的成员只能被继承一次,再继续继承,父类的成员就不可见了
class A { public: int a; void printa(){printf("a\n");} protected: int b; void printb(){printf("b\n");} private: int c; void printc(){printf("c\n");} }; class B: public A { public: void printda(){printa();a++;b++;};//c++ }; class C:private A { public: void printca(){printa();a++;b++;};//c++ void printcb(){printb();}; // void printdc(){printc();}; }; class D:protected A { public: void printda(){printa();a++;b++;};//c++ void printdb(){printb();}; // void printdc(){printc();}; }; class E:public C { public: void printea(){}//a++ private不能隔代继承 }; class F:public D { public: void printea(){a++;b++;} //c++; }; int _tmain(int argc, _TCHAR* argv[]) { A a; a.a; //a.b; //a.c; a.printa(); B b; b.a; //b.b; //b.c b.printa(); //b.printb(); C c; //c.a; //c.b; //c.c; //c.printa(); D d; //d.a; //d.b; //d.c; //d.printa();
本博客内容均来自网络,如有雷同,是我抄袭!