public,private,protected

类的privateprotected成员,在类外是不可以使用的.只有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 
}
View Code

 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();
View Code

 

posted on 2014-10-23 16:33  kangbry  阅读(853)  评论(0编辑  收藏  举报

导航