一,C++里public,protected,private的意义和用处
1,public,protected,private可以用来控制类变量和函数的访问权限。
类对象可以访问public成员变量和函数,不能访问protected,private成员变量和函数。
但在类内部这三种类型的变量和函数都是可以访问的。
我们用下面的代码来说明
#include <iostream>
class Player
{
public://公有函数
Player() {
//在类内部可以访问public,protected,private修饰的变量和函数
id = 101;
sex = 1;
age = 20;
std::cout << "id=" << GetID() << std::endl;
std::cout << "sex=" << GetSex() << std::endl;
std::cout << "age=" << GetAge() << std::endl;
}
int GetID()const { return id; }
protected://保护函数
int GetSex()const { return sex; }
private://私有函数
int GetAge()const { return age; }
public://公有成员
int id = 100;
protected://保护成员
int sex = 0;
private://私有成员
int age = 18;
};
int main()
{
Player andy;
//类对象可以访问public修饰的变量
andy.id = 200;
//类对象可以访问public修饰的函数
std::cout << "id=" << andy.GetID() << std::endl;
//以下编译不通过,类对象不能访问protected,private修饰的变量和函数
// andy.sex = 0;
// std::cout << "sex=" << GetSex() << std::endl;
// andy.age = 22;
// std::cout << "age=" << GetAge() << std::endl;
}
二,public,protected,private用在派生类中。
1,公有继承
公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。
2,保护继承
保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。
3,私有继承
私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。
总结为一句话:派生类不能访问基类里的私有成员,只能访问公有成员和保护成员。
使用最多的是公有继承。
class MmoPlayer: public Player {
public:
MmoPlayer()
{
//派生类访问基类里的公有成员和函数
id = 102;
std::cout << "id=" << GetID() << std::endl;
//派生类访问基类里的保护成员和函数
sex = 1;
std::cout << "sex=" << GetSex() << std::endl;
//派生类不能访问基类里的用private修饰的变量和函数
// age = 16;
// std::cout << "age=" << GetAge() << std::endl;
}
};
int main()
{
MmoPlayer tom;
//基类的公共成员在派生类中为公共成员,类对象可访问
tom.id = 200;
//基类的保护成员在派生类中为保护成员,类对象不可访问
// tom.sex = 0;
//基类的私有成员在派生类中为私有成员,类对象不可访问
// tom.age = 20;
}