继承类访问基类私有成员
时间: 2023-09-18 21:07:20 浏览: 144
在C++中,派生类是不能直接访问基类的私有成员的。这是因为私有成员只能在基类内部访问,对于派生类和其他类来说都是不可见的。
但是,可以使用公有或保护成员函数来访问基类的私有成员。通过将这些函数定义在基类中,派生类可以通过调用这些函数来访问基类的私有成员。
例如,假设有一个基类A和一个派生类B,A中有一个私有成员变量x,B想要访问这个私有成员变量x。可以在A中定义一个公有成员函数getX()来获取x的值,然后在B中调用这个函数。
代码示例:
```c++
class A {
private:
int x;
public:
int getX() { return x; }
};
class B : public A {
public:
void printX() { cout << "x = " << getX(); }
};
int main() {
B objB;
objB.printX(); // 输出 x 的值
return 0;
}
```
在上面的例子中,B类继承自A类,并且通过调用A类中的getX()函数来获取私有成员变量x的值,并在B类的printX()函数中输出x的值。
相关问题
公有继承派生类怎么访问基类私有成员
在公有继承中,基类的私有成员是不能被派生类直接访问的。但是,可以通过在基类中提供公有的成员函数来实现对私有成员的访问。具体的做法是在基类中声明一个公有成员函数,用于返回私有成员的值,并在派生类中调用这个公有成员函数来访问基类的私有成员。
例如,假设有一个基类`BaseClass`,其中包含私有成员变量`m_private_var`,可以在基类中声明一个公有的成员函数`getPrivateVar`,用于返回`m_private_var`的值:
```
class BaseClass {
private:
int m_private_var;
public:
int getPrivateVar() const {
return m_private_var;
}
};
```
然后,在派生类中可以通过调用`BaseClass`的`getPrivateVar`函数来访问`m_private_var`:
```
class DerivedClass : public BaseClass {
public:
void someFunction() {
int privateVarValue = getPrivateVar();
// 使用 privateVarValue
}
};
```
注意,这里的`getPrivateVar`函数必须是公有的,否则派生类无法调用它,也无法访问基类的私有成员。
c++私有继承能否访问基类的私有成员
在 C++ 中,私有继承可以访问基类的所有成员,包括私有成员。但是,基类的私有成员在派生类中也变成了私有成员,因此只能在派生类内部访问,不能在派生类外部或基类中访问。
例如,假设有如下的代码:
```c++
class Base {
private:
int x;
public:
void foo() {}
};
class Derived : private Base {
public:
void bar() {
x = 10; // 错误,无法访问基类的私有成员
foo(); // 正确,可以访问基类的公有成员
}
};
```
在上面的例子中,Derived 类从 Base 类进行私有继承,因此 x 成员在 Derived 类中变成了私有成员,无法直接访问。但是,由于 foo() 是公有成员,因此可以在 Derived 类中直接访问。
阅读全文