C++中在父类内部,在子类内部,在主函数内,访问父类保护非静态成员变量的方式有哪些?
时间: 2024-12-19 09:14:50 浏览: 9
在C++中,访问父类的保护(protected)非静态成员变量通常涉及到三种情况:
1. **从派生类(子类)内部**:
- **通过作用域解析运算符::**: 子类可以直接访问其父类的protected成员,因为访问权限被扩大到了子类内部。例如:
```cpp
class Base {
protected:
int protectedVar;
};
class Derived : public Base {
public:
void method() {
// 可以直接访问
base.protectedVar; // base是对Base类型的引用,表示当前对象
}
};
```
2. **在派生类的友元函数或友元类内部**:
- 如果父类的某个成员函数或友元类被声明为`Derived`的友元,那么它们也可以访问`Base`的protected成员变量。这允许友元对这类变量有特殊访问权。
```cpp
class FriendClass;
friend class FriendClass;
class Derived : public Base {
private:
friend class FriendClass; // FriendClass可以访问Base的protected成员
//...
};
class FriendClass {
public:
void someFriendFunction(Base& base) {
base.protectedVar;
}
};
```
3. **在派生类的构造函数、析构函数、赋值操作符等特殊成员函数中**:
- 这些特殊成员函数默认拥有更大的访问权限,可以直接访问派生类的基类的受保护成员,即使它们不是friend。
```cpp
class Derived : public Base {
public:
Derived() : Base() {} // 构造函数可以访问Base的protected成员
~Derived() {} // 析构函数也是如此
Derived(const Derived&) = default; // 赋值构造函数同样可以
//...
};
```
阅读全文