在c++中,派生类以私有方式继承,派生类中的成员函数不可以调用基类中公有函数吗
时间: 2023-05-25 16:05:55 浏览: 145
是的,在C语言中实现面向对象编程时,派生类以私有方式继承基类时,基类中的公有函数就变成了派生类的私有成员,因此派生类中的成员函数无法直接调用基类中的公有函数。只有通过派生类中的其他成员函数间接调用基类中的公有函数,或者使用友元函数来访问基类中的公有函数。
相关问题
用c++语言实现Derived类通过私有继承的方式从基类Base继承而来,Base类包含公有成员函数work1()、work2(),在主函数中通过派生类Derived的对象调用基类函数work1(),在work1()中显式输出信息验证是否被调用
以下是用c++语言实现Derived类通过私有继承的方式从基类Base继承而来,Base类包含公有成员函数work1()、work2(),在主函数中通过派生类Derived的对象调用基类函数work1(),在work1()中显式输出信息验证是否被调用的示例代码:
```c++
#include <iostream>
using namespace std;
class Base {
public:
void work1() {
cout << "Base::work1()" << endl;
}
void work2() {
cout << "Base::work2()" << endl;
}
};
class Derived : private Base {
public:
void callBaseWork1() {
work1();
}
};
int main() {
Derived d;
d.callBaseWork1();
return 0;
}
```
在这个示例中,我们定义了一个Base类和一个Derived类。Derived类通过私有继承的方式从Base类继承而来。在Base类中,我们定义了两个公有成员函数work1()和work2()。在Derived类中,我们定义了一个公有成员函数callBaseWork1(),它会调用从Base类继承而来的work1()函数。在主函数中,我们创建了Derived类的一个对象d,并调用了它的callBaseWork1()函数。
运行程序时,会输出如下信息:
```
Base::work1()
```
可以看到,work1()函数被成功调用,并且在work1()函数中显式输出了信息。这说明,Derived类通过私有继承的方式从Base类继承而来的work1()函数是可以被调用的。
c++ Derived类通过私有继承的方式从基类base继承而来,base类包含公有成员函数work1(),work2(),在主函数中通过派生类derived的对象调用基类函数work1(),在work1()函数中显示输出信息验证work1()是否被调用
好的,根据你的要求,以下是代码实现:
```c++
#include <iostream>
class Base {
public:
void work1() {
std::cout << "Base::work1() is called." << std::endl;
}
void work2() {
std::cout << "Base::work2() is called." << std::endl;
}
};
class Derived : private Base {
public:
void callBaseWork1() {
work1();
}
};
int main() {
Derived d;
d.callBaseWork1();
return 0;
}
```
在这个例子中,我们定义了 `Base` 基类和 `Derived` 派生类,通过私有继承的方式从 `Base` 继承而来。在 `Base` 中包含了公有成员函数 `work1()` 和 `work2()`。在 `Derived` 中,我们定义了一个新的成员函数 `callBaseWork1()`,它通过调用基类函数 `work1()` 来验证它是否被调用。
在主函数中,我们创建了 `Derived` 的对象 `d`,并调用了它的 `callBaseWork1()` 函数。在 `callBaseWork1()` 函数中,我们调用了基类函数 `work1()`,并在函数中显示输出了信息,用于验证它是否被调用。
编译运行这段代码,输出结果为:
```
Base::work1() is called.
```
可以看到,基类函数 `work1()` 被成功调用,并输出了信息。
阅读全文