深入解析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;}
上面代码中,被注释掉的语句编译无法通过
相关文章推荐
- 详解C++编程中的输入输相关的类和对象
- C++中类的构造函数调用顺序
- IOS开发笔记1-C语言笔记
- C/C++测试---判断输入的年月日是否合法
- 几大典型排序算法的c++代码实现及总结
- 不允许创建临时变量交换两个变量的内容
- More Effective C++ ——02_尽量使用C++风格的类型转换
- c++primer plus第十三章-虚函数virtual
- C++序列化方法 参考google protobuf
- 使用C++的类模板实现Stack类
- C++ 类访问控制
- C++ 多线程
- 设置一个临时变量交换两个变量的值
- C++ 预处理器
- 简要解读C++的动态和静态关联以及虚析构函数
- c/c++编程习惯
- Java和c++类实现单向链表
- C++ 动态内存
- More Effective C++ ——01_指针与引用的区别
- C语言高速入口系列(七)