C ++中Private和Protected之间的区别
在C++类对象的概念中,有三种访问修饰符:1)private,2)protected和3)public。根据其属性使用它们。在这里,我们将了解什么是私有成员和受保护成员,它们之间有什么区别?
1)私有成员-private
私有成员在类中用关键字private声明,后跟冒号(:)字符,并且只能在声明了类的类中访问它们。类外部无法访问私人成员。
私有成员可以是数据成员(变量)和成员函数(函数),并且两者都可以在同一类中访问,它们可以在同一类的私有/公共成员函数中使用。
看下面的示例,它包含两个私有成员的名称和城市,并在公共成员函数getPerson()和dispPerson()中使用它们。
//私人会员的例子
#include <iostream>
using namespace std;
class person {
//私有成员
private:
string name;
int age;
//公共成员
public:
void getPerson()
{
cout << "Enter name: ";
cin >> name;
cout << "Enter age: ";
cin >> age;
}
void dispPerson()
{
cout << "Name: " << name << endl;
cout << "Age: " << age << endl;
}
};
//主要函数
int main(){
//创建对象
person per;
per.getPerson();
per.dispPerson();
return 0;
}输出结果
Enter name: Shivang Enter age: 21 Name: Shivang Age: 21
2)受保护的成员-protected
受保护的成员在类中使用关键字protected声明,后跟冒号(:)字符,并且可以在声明它们的类中访问它们,也可以在派生类或子类中访问它们。受保护的成员用于继承的概念。就像私有成员一样,不能在类之外(在派生类中除外)访问受保护的成员。
受保护的成员可以是数据成员(变量)和成员函数(函数),并且两者都可以在同一类以及派生类,子类或子类中访问。
考虑下面的示例,有两个类:person(是基类)和person2(派生类),person类包含两个私有成员的名称和城市,一个受保护成员roll_no,私有成员在public成员函数getPerson()和dispPerson()中使用。
在person1类中,有一个私有成员city和三个公共成员函数set_roll_no(),它用于设置person类中受保护成员roll_no的值,getPerson1(),它调用person类的getPerson()成员函数,并获取city的输入。类似地,dispPerson1()——它调用dispPerson()成员函数,并打印roll_no和city的值
//受保护成员的示例
#include <iostream>
using namespace std;
//基类
class person {
//私有成员
private:
string name;
int age;
//受保护的成员
protected:
int roll_no;
//公共成员
public:
void getPerson()
{
cout << "Enter name: ";
cin >> name;
cout << "Enter age: ";
cin >> age;
}
void dispPerson()
{
cout << "Name: " << name << endl;
cout << "Age: " << age << endl;
}
};
//派生类
class person1 : public person {
//私有
private:
string city;
//公共
public:
void set_roll_no(int r)
{
//这里roll_no是个人的受保护成员
//类,可以在这里访问
roll_no = r;
}
void getPerson1()
{
//打电话getPerson()阅读基本细节 getPerson();
//输入城市
cout << "Enter city: ";
cin >> city;
}
void dispPerson1()
{
//显示roll_no-
cout << "Roll No.: " << roll_no << endl;
//调用dispPerson()以打印基本详细信息 dispPerson();
//显示城市也
cout << "City: " << city << endl;
}
};
//主要功能
int main(){
//创建对象
person1 per;
//设定卷编号
per.set_roll_no(101);
//获取所有详细信息
per.getPerson1();
//打印所有详细信息
per.dispPerson1();
return 0;
}输出结果
Enter name: Shivang Enter age: 21 Enter city: Indore Roll No.: 101 Name: Shivang Age: 21 City: Indore