c++定义任意基类和派生类 分析访问属性变化(包括不可访问) 派生类添加同名成员,检查内部和外部访问
时间: 2024-12-10 07:39:19 浏览: 27
在 C++ 中,定义任意基类和派生类主要是通过使用 `class` 关键字来创建。首先,我们定义一个基类(Base Class),通常包含一些公共数据成员和成员函数:
```cpp
class BaseClass {
public:
int publicData; // 公有成员
void publicMethod() { /* 公有方法 */ }
protected:
int protectedData; // 受保护成员
void protectedMethod() { /* 受保护方法 */ }
private:
int privateData; // 私有成员
void privateMethod() { /* 私有方法 */ }
};
```
然后我们可以创建一个派生类(Derived Class),它可以从基类继承,并可以添加新的成员或者覆盖已有的成员:
```cpp
class DerivedClass : public BaseClass { // 继承方式,public表示公有继承
public:
// 派生类增加同名成员,这里是公有
int publicDataOverride;
void publicMethodOverride();
private:
// 派生类也可以添加私有成员
int derivedPrivateData;
// 如果需要,可以访问基类的私有成员(不推荐,除非有特殊需求)
friend class DerivedClassFriend; // 需要友元声明才能访问
void accessBasePrivate();
};
// 实现派生类的同名成员函数
void DerivedClass::publicMethodOverride() {
// 实现细节...
}
// 派生类访问基类受保护和私有成员
void DerivedClass::accessBasePrivate() {
BaseClass baseInstance;
baseInstance.protectedMethod(); // 可以访问受保护方法
// 这里不能直接访问私有成员,需要友元支持
}
```
访问属性的变化主要包括:
1. **公有**:可以直接在任何地方访问。
2. **受保护**:只能在派生类及它们的派生类中访问。
3. **私有**:仅限于当前类内访问。
当派生类添加同名成员时,如果新成员的访问权限大于或等于基类中的同名成员,则基类的同名成员将被隐藏。如果想要访问基类的同名成员,需要明确地指定基类名称或者使用友元(如上例中`accessBasePrivate()`)。
阅读全文