关于私有继承
2015-08-17 09:08
197 查看
类内部成员的访问权限容易理解,而在继承时设定的权限设置少有注意。
比如近几天碰到的问题:
main函数使用:
直接报错:
其实这对CPP开发者来说是最基本不过的问题,private继承后,基类Person的方法不能再main代码范围内访问。常常说基类的成员函数默认情况下都将在派生类中变为私有。这话怎么理解?是相当于在Worker中定义一个
private GetAge()么?经过测试如此。pw->GetAge() 不能调用,但是在Worker的成员函数中可以调用GetAge(); 但是如果基类中的GetAge()改为private,那么在Worker的成员函数也是无法访问的。
私有继承导致在main中两个都无法访问。
但是Work中的新定义的成员函数能访问么?
默认的private继承时:
基类中的private成员只能在基类中访问,无法在继承类以及其他外部访问。
基类中的public成员能在基类和继承类中访问,不能被其他外部代码访问。
(待续)
比如近几天碰到的问题:
[code]class Person { public: Person():m_age(0) { cout << "Person::Person()" << endl; } Person(int age): m_age(age) { cout << "Person::Person(int age)" << endl; } ~Person() { cout << "Person::~Person()" << endl; } int GetAge() { return m_age; } string GetName() { return m_name; } string m_name; private: int m_age; }; class Worker: Person { public: Worker() { cout << "Worker::Worker()" << endl; }; Worker(int age): Person(age) { cout << "Worker::Worker(int age)" << endl; } ~Worker() { cout << "Worker::~Worker()" << endl; }; string GetCompany() { return m_company; } private: string m_company; };
main函数使用:
[code]Worker *pw = new Worker(20); cout << pw->GetAge() << endl;
直接报错:
[code]error C2247: 'Person::get_age' not accessible because 'Worker' uses 'private' to inherit from 'Person'
其实这对CPP开发者来说是最基本不过的问题,private继承后,基类Person的方法不能再main代码范围内访问。常常说基类的成员函数默认情况下都将在派生类中变为私有。这话怎么理解?是相当于在Worker中定义一个
private GetAge()么?经过测试如此。pw->GetAge() 不能调用,但是在Worker的成员函数中可以调用GetAge(); 但是如果基类中的GetAge()改为private,那么在Worker的成员函数也是无法访问的。
[code]public: string GetName() { return m_name; } string m_name; private: int GetAge() { return m_age; } //main.cpp Worker *pw = new Worker(20); cout << pw->GetName() << endl; cout << pw->GetAge() << endl;
私有继承导致在main中两个都无法访问。
但是Work中的新定义的成员函数能访问么?
默认的private继承时:
基类中的private成员只能在基类中访问,无法在继承类以及其他外部访问。
基类中的public成员能在基类和继承类中访问,不能被其他外部代码访问。
(待续)
相关文章推荐
- CSS实现跨浏览器兼容性的盒阴影效果
- TCP/IP三次握手和四次挥手
- 给网站外链进行重定向跳转
- html选中图片时,在页面回写图片
- 使用select函数改进客户端/服务器端程序
- sed删掉换行符
- 网站设计
- java学习之JAXB解析xml
- recordset.editmode
- nyoj448 寻找最大数
- Tomcat创建虚拟目录和程序热部署
- XlistView改进
- Java常用类及其常用方法
- 可用的搜索hosts
- freemarker写select包(四)
- 聊一聊关于AIDL 那点事
- jQuery幻灯片带缩略图轮播效果代码分享
- 蓝的成长记——追逐DBA(18):小机上WAS集群故障,由一次更换IP引起
- jquery中validate插件表单验证
- XlistView下拉刷新,上拉加载更多改良