概述
#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++ 中基类及派生类中继承成员访问权限所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复