C++ 学习(派生类到基类准还的可访问性)

来源:互联网 发布:python 改变路径 编辑:程序博客网 时间:2024/06/05 16:28
  • 当派生类是以公有方式继承时,用户代码才能使用派生类向基类的转换,否则用户代码不可完成转换
  • 无论派生类是以哪种方式继承,派生类的成员函数和友元函数都可以完成派生类向基类的转换。
  • 设派生类是D, 基类是B, 当以protected方式继承时,D的派生类的成员函数和友元可以完成派生类向基类的转换, 但是如果D继承B 的方式是private则不可以。
    代码写得有点恶心
#include <iostream>#include <string.h>#include <algorithm>#include <stdlib.h>#include <stdio.h>using namespace std;void func();class A{  public:    int a;    void get(){      cout<<"A "<<":  "<<a<<endl;    }};class B : public A{    public:    int b;    void getB(){      cout<<"b  : "<< b<<endl;    }    void getA(A &a){      cout<<"getA   :"<<a.a<<endl;    }};class C: protected A{   public :   int c;   void getC(){      cout<<" c    "<<c<<endl;   }   void inputA(int n){      a =  n;   }    void getA( C & cc){      A aa = (C) cc;      cout<<"getA   :" <<aa.a<<endl;    }    friend void func(C c);};class D: private A{  public:      int d;  void getD(){    cout<<"D "<<d<<endl;  }    void getA(D &d){      A aa = (A) d;      cout<<"getA   :" <<aa.a<<endl;    }    void setA(int b){        a = b;    }    friend void func(D d);};void func(D d){         A aa = (A) d;         cout<<"friend   "<<aa.a<<endl;}void func(C c){   A aa = (A) c;  cout<<"friend   "<<aa.a<<endl;}void get(A &a){   a.get();}class E : protected B{};int main(){     B b;     A a;     C c;     D d;     a.a = 1;     b.a = 2;     c.c = 3;     c.inputA(3);     d.setA(4);     //D d;     //get(c);    // d.getA(d);     func(d);}
0 0