派生类的成员和友元函数使用派生类向基类的转换的具体例子
时间: 2024-01-24 09:17:38 浏览: 82
c++例题关于基类与派生类
假设我们有如下的基类和派生类:
```c++
class Base {
protected:
int num;
public:
Base(int n) : num(n) {}
void display() {
cout << "Base num: " << num << endl;
}
};
class Derived : public Base {
public:
Derived(int n) : Base(n) {}
friend void func(Derived& d) {
cout << "Derived num: " << d.num << endl;
}
};
```
这里有一个友元函数 `func`,它需要访问派生类 `Derived` 的成员变量 `num`。但是由于 `num` 是 `Base` 的保护成员,不能直接访问,因此我们要使用派生类向基类的转换。具体实现如下:
```c++
int main() {
Derived d(10);
Base& b = d; // 派生类向基类的转换
b.display(); // 调用的是 Base 类的 display 函数
func(d); // 友元函数可以访问 Derived 类的 num 成员
return 0;
}
```
在 `main` 函数中,我们首先将派生类 `d` 强制转换为基类 `Base` 的引用 `b`。这样 `b` 就可以调用基类 `Base` 的成员函数 `display`。然后我们调用了友元函数 `func`,它可以访问派生类 `Derived` 的成员变量 `num`。
总的来说,派生类向基类的转换可以让我们在外部访问基类的成员函数和保护成员变量,同时也可以让友元函数访问派生类的成员变量。
阅读全文