public:(开放性最强)
- public成员可以在类的内部和外部被访问。
- public成员可以被类的对象、类的成员函数和类的友元函数访问。
class MyClass { public: int publicVar; void publicFunc() { cout << "可以访问函数publicFunc()" << endl; } }; int main() { MyClass p; p.publicFunc(); }
private:(局限性最强)
- private成员只能在类的内部被访问。
- private成员只能被类的成员函数和类的友元函数访问。
-
class MyClass { private: int privateVar; void privateFunc() { privateVar = 100;// 不报错,类内可以访问privateVar } }; class ThemClass : public MyClass { public: void test() { //privateVar = 100;报错,在派生类内部不可以访问 } }; class YOUClass { public: MyClass p2; void Func() { //p2.privateFunc();报错,类外不可以访问 } }; int main() { MyClass p; //p.privateFunc();//报错,类外不可以访问 }
protected:
- protected成员可以在类的内部被访问。
- protected成员可以被类的成员函数、类的派生类和类的友元函数访问。
class Base {
friend class friendclass;//友元函数
private:
int privateVar; // 私有成员变量
protected:
int protectedVar; // 受保护成员变量
public:
void publicMethod() {
privateVar = 10; // 在类内部可以访问私有成员变量
protectedVar = 20; // 在类内部可以访问受保护成员变量
}
};
class friendclass {
public:
void test() {
Base p;
p.privateVar = 100;//友元函数可以访问privateVar
p.protectedVar = 50;//友元函数可以访问protectedVar
}
};
class Derived : public Base {
public:
void derivedMethod() {
//privateVar = 30; // 错误!无法访问私有成员变量
protectedVar = 40; // 在派生类内部可以访问受保护成员变量
}
};
int main() {
Base b;
//b.privateVar = 50; // 错误!无法访问私有成员变量
//b.protectedVar = 60; // 错误!无法访问受保护成员变量
Derived d;
//d.protectedVar = 70; // 错误!无法访问受保护成员变量
return 0;
}
区别在于:
- public成员可以被类的外部访问,private成员只能在类的内部访问,protected成员可以被派生类访问。
- private成员和protected成员都不能被类的外部访问,但private成员只能被当前类的成员函数和友元函数访问,而protected成员还可以被派生类访问。