在C ++类对象的概念中,有三种访问修饰符:1)private,2)protected和3)public。根据其属性使用它们。在这里,我们将了解什么是私有成员和受保护成员,它们之间有什么区别?
私有成员在类中用关键字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
受保护的成员在类中使用关键字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
私有成员 | 受保护的成员 |
---|---|
私有成员用关键字private声明,后跟冒号(:)字符。 | 受保护的成员使用关键字protected声明,后跟冒号(:)字符。 |
私有成员可以在声明它们的同一类中访问。 | 受保护的成员可以在同一类中以及在派生/子/子类中访问。 |
也可以通过友元函数访问私有成员。 | 无法通过友元函数访问受保护的成员。 |