您的位置:首页 > 编程语言 > C语言/C++

深入解析c++类成员的访问属性及被继承后的变化

2015-09-23 17:08 411 查看
从代码入手,先看一份代码
<pre name="code" class="cpp">#include <iostream>using namespace std;class Base{public:Base():m1(1),m2(2),m3(3){}public:int m1;protected:int m2;private:int m3;};class Drived1:public Base{public:void f(){cout << "Drived1::f()\n";cout << "Base::m1 == " << Base::m1 << endl;cout << "Base::m2 == " << Base::m2 << endl;//        cout << "Base::m3 == " << Base::m3 << endl;  //invalid}};class Drived2:protected Base{public:void f(){cout << "Drived2::f()\n";cout << "Base::m1 == " << Base::m1 << endl;cout << "Base::m2 == " << Base::m2 << endl;//        cout << "Base::m3 == " << Base::m3 << endl;  //invalid}};class Drived3:private Base{public:void f(){cout << "Drived3::f()\n";cout << "Base::m1 == " << Base::m1 << endl;cout << "Base::m2 == " << Base::m2 << endl;//        cout << "Base::m3 == " << Base::m3 << endl;  //invalid}};int main(){//BaseBase b;cout << "b.m1 == " << b.m1 << endl;//    cout << "b.m2 == " << b.m2 << endl;  //invalid//    cout << "b.m3 == " << b.m3 << endl;  //invalidcout << endl;//Drived1: public inheritDrived1 d1;cout << "d1.m1 == " << d1.m1 << endl;//    cout << "d1.m2 == " << d1.m2 << endl;  //invalid//    cout << "d1.m3 == " << d1.m3 << endl;  //invalidcout << "d1.f():\n"; d1.f();cout << endl;//Drived2: protected inheritDrived2 d2;//    cout << "d2.m1 == " << d2.m1 << endl;  //invalid//    cout << "d2.m2 == " << d2.m2 << endl;  //invalid//    cout << "d2.m3 == " << d2.m3 << endl;  //invalidcout << "d2.f():\n"; d2.f();cout << endl;//Drived3: private inheritDrived3 d3;//    cout << "d3.m1 == " << d3.m1 << endl;  //invalid//    cout << "d3.m2 == " << d3.m2 << endl;  //invalid//    cout << "d3.m3 == " << d3.m3 << endl;  //invalidcout << "d3.f():\n"; d3.f();cout << endl;return 0;}
上面代码中,被注释掉的语句编译无法通过
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: