三种访问权限
public: 公有成员,是类对外提供的可访问接口,在类内和类外都可以访问;
private: 私有成员,仅在类内可以被访问,对类外隐藏;
protected: 保护成员,同样对类外隐藏,但是在派生类中可以被访问。
#include <iostream>
using namespace std;
class A {
public:
A() {
}
public:
int data1;
protected:
int data2;
private:
int data3;
};
class B : public A {
public:
//公共继承类成员函数访问基类的共有成员
int fun1() {
return data1;
}
//公共继承类成员函数访问基类的保护成员
int fun2() {
return data2;
}
//公共继承类成员函数访问基类的私有成员
int fun3() {
//return data3; //错误A
}
};
class C : private A {
public:
//私有继承类成员函数访问基类的共有成员
int fun1() {
return data1;
}
//私有继承类成员函数访问基类的保护成员
int fun2() {
return data2;
}
//私有继承类成员函数访问基类的私有成员
int fun3() {
//return data3; //错误B
}
};
class D : protected A {
public:
//保护继承类成员函数访问基类的共有成员
int fun1() {
return data1;
}
//保护继承类成员函数访问基类的保护成员
int fun2() {
return data2;
}
//保护继承类成员函数访问基类的私有成员
int fun3() {
//return data3; //错误C
}
};
int main(int argc, const char *argv[])
{
B b; //公共继承
C c; //私有继承
D d; //保护继承
int var = 0;
//公共继承
b.data1 = var; //D 正确,公有成员公共继承后依然是公有成员,类对象可以访问自身的公有成员
//b.data2 = var; //E 错误,保护成员公共继承后依然是保护成员,类对象不能访问自身的保护成员
var = b.fun2(); //F 正确,保护成员继承后依然是保护成员,类对象当然是可以通过类方法访问自身的保护成员的!
//私有继承
//c.data1 = var; //G 错误,公有成员私有继承后变成私有成员,类对象不可以访问自身的私有成员
var = c.fun2(); //H 正确,保护成员在派生类中变成了私有的,当然可以通过类方法访问自身的私有成员!
//保护继承
//d.data1 = var; //I 错误,公有成员保护继承后变成保护成员,类对象不可以访问自身的保护成员
var = d.fun2(); //j 正确,基类保护成员在保护派生类中变成了保护的,当然可以通过类方法访问自身的保护成员!
return 0;
}