C++中对类的访问控制主要有三种修饰符:public、private和protected。这三种修饰符决定了外部代码如何访问类的成员变量和成员函数。
非继承时函数成员访问属性
public访问修饰符
当一个函数成员被设置为public时,该函数可以被类的所有外部代码或函数访问。例如:
class MyClass {
public:
void myPublicFunc();
};
void MyClass::myPublicFunc() {
// code
}
在上面的例子中,myPublicFunc()函数被设置为public修饰符,因此该函数可以被MyClass的所有外部代码或函数访问。
private访问修饰符
当一个函数成员被设置为private时,该函数只能被MyClass内部访问。例如:
class MyClass {
private:
void myPrivateFunc();
};
void MyClass::myPrivateFunc() {
// code
}
在上面的例子中,myPrivateFunc()函数被设置为private修饰符,因此该函数只能被MyClass内部的函数和成员访问,不能被类的外部代码或函数访问。
protected访问修饰符
当一个函数成员被设置为protected时,该函数可以被MyClass内部访问和MyClass的子类访问。例如:
class MyClass {
protected:
void myProtectedFunc();
};
void MyClass::myProtectedFunc() {
// code
}
class MySubClass : public MyClass {
public:
void myChildFunc();
};
void MySubClass::myChildFunc() {
myProtectedFunc();
}
在上面的例子中,myProtectedFunc()函数被设置为protected修饰符,因此该函数可以被MyClass内部的函数和成员访问,同时也可以被继承MyClass的子类(如MySubClass)中的成员访问。
继承过程中的访问控制
访问控制同样适用于类的继承过程。一个类可以从另一个类继承成员变量和成员函数,同时继承来的成员变量和成员函数也会受到访问控制的约束。
public继承
当一个类以public的方式继承另一个类时,基类中的public成员在派生类中保持为public访问权限,private成员在派生类中仍然是私有的,不能被派生类访问(包括派生类中的成员函数)。
class MyBaseClass {
public:
void myPublicFunc();
private:
void myPrivateFunc();
};
void MyBaseClass::myPublicFunc() {
// code
}
void MyBaseClass::myPrivateFunc() {
// code
}
class MyDerivedClass : public MyBaseClass {
public:
void myChildFunc();
};
void MyDerivedClass::myChildFunc() {
myPublicFunc();
}
在上面的例子中,MyDerivedClass以public的方式继承自MyBaseClass。因此,myPublicFunc()函数在MyDerivedClass类中仍然是public的访问权限,可以被MyDerivedClass类的所有外部代码和函数访问。myPrivateFunc()函数在MyDerivedClass类中仍然是private的访问权限,不能被该类的任何外部代码和函数访问。
protected继承
当一个类以protected的方式继承另一个类时,基类中的public成员和protected成员在派生类中都称为protected成员,private成员在派生类中仍然是私有的,不能被派生类访问(包括派生类中的成员函数)。
class MyBaseClass {
public:
void myPublicFunc();
protected:
void myProtectedFunc();
private:
void myPrivateFunc();
};
void MyBaseClass::myPublicFunc() {
// code
}
void MyBaseClass::myProtectedFunc() {
// code
}
void MyBaseClass::myPrivateFunc() {
// code
}
class MyDerivedClass : protected MyBaseClass {
public:
void myChildFunc();
};
void MyDerivedClass::myChildFunc() {
myPublicFunc();
myProtectedFunc();
// myPrivateFunc(); // error: MyDerivedClass cannot access MyBaseClass::myPrivateFunc()
}
在上面的例子中,MyDerivedClass以protected的方式继承自MyBaseClass。因此,myPublicFunc()函数和myProtectedFunc()函数在MyDerivedClass类中都是protected访问权限,不能被该类以外的外部代码和函数访问。myPrivateFunc()函数在MyDerivedClass类中仍然是private的访问权限,不能被该类的任何外部代码和函数访问。
总结
C++中的访问控制是通过修饰符public、private和protected实现的。同时,访问控制同样适用于类的继承过程。学会理解和正确运用访问控制的知识,可以提高代码的可维护性和安全性。
以上就是C++非继承时函数成员访问属性和类继承过程中的访问控制的攻略。希望可以对读者有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++非继承时函数成员访问属性和类继承过程中的访问控制 - Python技术站