public, protect, private 是实现面向对象的封装性的关键。控制了类的接口访问权限,并控制了子类对父类的继承关系。
- public 修饰的变量和函数在类的内部和外部都可以访问;
- private 修饰的变量和函数只有在类的内部可以访问;
- protected 修饰的变量和函数在类的内部可以访问,还可以在派生类中访问。
- public 和 private 的区别。public 的变量和函数在类的内部和外部都可以访问,而 private 只在类的内部可以访问。例如:
#include <iostream>
using namespace std;
class Humen
{
public: // 公共成员
Humen(char* name, int age = 0); // 构造函数
char* getName(); // 获取姓名成员函数
char* name; // 姓名成员函数
private:
int getAge(); // 获取年龄成员函数
int age; // 年龄成员函数
};
Humen::Humen (char* n, int a)
{
name = n;
age = a;
}
char* Humen::getName()
{
return name;
}
int Humen::getAge()
{
return age;
}
int main()
{
int age = 0;
char* name = NULL;
Humen h("yang", 10);
name = h.name; // 类的外部可以访问公有变量,正确
// age = h.age; // 类的外部不能访问么有变量,错误
cout << h.getName() << endl;
cout << h.getAge () << endl;
return 0;
}
- protected 和 private 区别。如果类没有派生出其他类,那么 protected 和 private 是完全相同的,protected 和 private 一样只能在类的内部访问,不能在类的外部访问。但是如果在派生其他类的情况下,protected 和 private 的区别就体现出来了。private 修饰的变量只能在类的内部访问,在其派生类中也不能访问;而 protected 修饰的变量和函数可以在派生类中访问,例如:
#include <iostream>
using namespace std;
class Humen
{
public: // 公共成员
Humen(char* name, int age = 0);
char* getName();
int getAge ();
protected: // 保护成员
char* name;
private: // 私有成员
int age;
};
class Women : public Humen // 公有继承
{
public: // 公共成员
Women(char* n, int a = 0) : Humen(n, a) {}
char* getName();
int getAge ();
};
Humen::Humen (char* n, int a)
{
name = n;
age = a;
}
int Women::getAge()
{
return 15;
}
char* Women::getName()
{
return name;
}
int main()
{
int age = 0;
char* name;
Humen h("yang", 20);
// name = h.name; // 类的外部不能访问私有变量,错误
// age = h.age; // 类的外部不能访问保护变量,错误
Women w("yang", 20);
cout << w.getName() << endl;
cout << w.getAge () << endl;
return 0;
}