| #include <iostream> | |
| #include <string> | |
| using namespace std; | |
| class CBase { | |
| string name; | |
| int age; | |
| public: | |
| string getName() { | |
| return name; | |
| } | |
| int getAge() { | |
| return age; | |
| } | |
| protected: | |
| void setName(string s) { | |
| name = s; | |
| } | |
| void setAge(int i) { | |
| age = i; | |
| } | |
| }; | |
| class CPublicDerive : public CBase { //用 public 指定公有继承 | |
| public: | |
| void setBase(string s, int i) { | |
| setName(s); //调用基类的保护成员 | |
| setAge(i); //调用基类的保护成员 | |
| //调用基类的私有成员 | |
| //cout << name << " " << age << endl; //编译出错 | |
| } | |
| }; | |
| class CProtectDerive : protected CBase { //用 protected 指定保护继承 | |
| public: | |
| void setBase(string s, int i) { | |
| setName(s); //调用基类的保护成员 | |
| setAge(i); //调用基类的保护成员 | |
| //调用基类的私有成员 | |
| //cout << name << " " << age << endl; //编译出错 | |
| } | |
| string getBaseName() { | |
| return getName(); //调用基类的公有成员 | |
| } | |
| int getBaseAge() { | |
| return getAge(); //调用基类的公有成员 | |
| } | |
| }; | |
| class CPrivateDerive : private CBase { //用 private 指定私有继承,private可以省略 | |
| public: | |
| void setBase(string s, int i) { | |
| setName(s); //调用基类的保护成员 | |
| setAge(i); //调用基类的保护成员 | |
| //调用基类的私有成员 | |
| //cout << name << " " << age << endl; //编译出错 | |
| } | |
| string getBaseName() { | |
| return getName(); //调用基类的公有成员 | |
| } | |
| int getBaseAge() { | |
| return getAge(); //调用基类的公有成员 | |
| } | |
| }; | |
| int main ( ) | |
| { | |
| // 公有继承 | |
| CPublicDerive cpublic; | |
| cpublic.setBase("public", 1); | |
| //调用基类的私有成员 | |
| //cout << cpublic.name << " " << cpublic.age << endl; //编译出错 | |
| //调用基类的公有成员 | |
| cout << cpublic.getName() << " " << cpublic.getAge() << endl; | |
| //调用基类的保护成员 | |
| //cpublic.setName("xyz"); //编译出错 | |
| //cpublic.setAge(20); //编译出错 | |
| // 保护继承 | |
| CProtectDerive cprotect; | |
| cprotect.setBase("protect", 2); | |
| //调用基类的公有成员 | |
| //cout << cprotect.getName() << " " << cprotect.getAge() << endl; //编译出错 | |
| cout << cprotect.getBaseName() << " " << cprotect.getBaseAge() << endl; | |
| //调用基类的保护成员 | |
| //cprotect.setName("xyz"); //编译出错 | |
| //cprotect.setAge(20); //编译出错 | |
| // 私有继承 | |
| CPrivateDerive cprivate; | |
| cprivate.setBase("private", 3); | |
| //调用基类的公有成员 | |
| //cout << cprivate.getName() << " " << cprivate.getAge() << endl; //编译出错 | |
| cout << cprivate.getBaseName() << " " << cprivate.getBaseAge() << endl; | |
| //调用基类的保护成员 | |
| //cprivate.setName("xyz"); //编译出错 | |
| //cprivate.setAge(20); //编译出错 | |
| // 隐式类型转换 | |
| CBase &cbase = cpublic; | |
| // cbase.setName("xyz"); //编译出错 | |
| // cbase.setAge(20); //编译出错 | |
| cout << cbase.getName() << " " << cbase.getAge() << endl; | |
| return 0; | |
| } |
最后
以上就是清脆音响最近收集整理的关于C++ 中基类及派生类中继承成员访问权限的全部内容,更多相关C++内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复