派生类包含了从自己定义的新成员以及从基类继承而来的成员。 那么I派生类的对象,是否也包含了基类里的私有成员变量? 是简单的不可直接访问、还是直接就在没有包含? 请写出一个测试小程序、用于回答和演示这个问题
时间: 2024-10-13 16:16:22 浏览: 22
派生类确实包含了从基类继承的成员,包括公有成员和保护成员(默认为 protected),这些都是可以直接访问的。但是,基类的私有成员(private)在派生类中是不可直接访问的,因为访问权限限定在其自身类内。
为了演示这一点,我们可以编写一个简单的 C++ 程序:
```cpp
#include <iostream>
// 基类 Base
class Base {
public:
int publicVar = 10; // 公有成员
protected:
int protectedVar = 20; // 保护成员
private:
int privateVar = 30; // 私有成员
void showPublic() { std::cout << "Public Var: " << publicVar << "\n"; }
void showProtected() { std::cout << "Protected Var: " << protectedVar << "\n"; }
};
// 派生类 Derived
class Derived : public Base {
public:
void derivedMethod() {
// 可以访问基类的公有和保护成员
showPublic();
Base& baseRef = *this;
baseRef.showProtected();
// 但不能直接访问私有成员
// int priv = baseRef.privateVar; (这将导致编译错误)
}
void accessThroughBase() {
// 使用基类指针可以间接访问私有成员,但需要通过特定方式
Base* basePtr = this;
basePtr->privateVar = 40; // 虽然可以看到变化,但这是不推荐的做法
std::cout << "Indirectly accessing Private Var: " << basePtr->privateVar << "\n";
}
};
int main() {
Derived derivedObj;
derivedObj.derivedMethod();
derivedObj.accessThroughBase();
return 0;
}
```
在这个程序中,`Derived`类的对象虽然可以间接访问基类的私有成员,但通常不这样做,因为这违背了封装原则。运行这个程序,你会看到只有公有和保护成员的值可以显示出来。
阅读全文