在C++中Private和Protected的区别(带例子)
Protected
Protected访问修饰符和私有访问修饰符类似,区别在于,声明为Protected的类成员无法在类外部访问,但是它们可以被该类的任何子类(派生类)访问。
示例:
// C++程序演示
// 受保护的访问修饰符
#include <bits/stdc++.h>
using namespace std;
// 基类
class Parent {
// 受保护的数据成员
protected:
int id_protected;
};
// 子类或派生类
class Child : public Parent {
public:
void setId(int id)
{
// 子类能够访问基类继承的受保护的数据成员
id_protected = id;
}
void displayId()
{
cout << "id_protected is: "
<< id_protected << endl;
}
};
// 主函数
int main()
{
Child obj1;
// 派生类的成员函数可以访问基类的受保护的数据成员
obj1.setId(81);
obj1.displayId();
return 0;
}
输出:
id_protected is: 81
Private
声明为private的类成员只能被类内部的函数访问。任何对象或函数都不允许直接访问它们。只有成员函数或友元函数才被允许访问类的私有数据成员。
示例:
// C++程序演示私有的
// 访问修饰符
#include <iostream>
using namespace std;
class Circle {
// 私有数据成员
private:
double radius;
// 公共成员函数
public:
void compute_area(double r)
{
// 成员函数可以访问私有数据成员半径
radius = r;
double area = 3.14 * radius * radius;
cout << "Radius is: " << radius << endl;
cout << "Area is: " << area;
}
};
// 主函数
int main()
{
// 创建类的对象
Circle obj;
// 尝试直接在类外部访问私有数据成员
obj.compute_area(1.5);
return 0;
}
输出:
Radius is: 1.5
Area is: 7.065
Private和Protected的区别
Private | Protected |
---|---|
声明为private的类成员只能被类内部的函数访问。 | 受保护的访问修饰符和私有访问修饰符类似。 |
私有成员保留程序中的实现细节。 | 受保护的成员增强了派生类的访问权限。 |
只有成员函数或友元函数才被允许访问类的私有数据成员。 | 声明为Protected的类成员无法在类外部访问,但是它们可以被该类的任何子类(派生类)访问。 |
私有成员在类中不会被继承。 | 受保护的成员在类中可以被继承。 |