class BC { public: virtual void f() {//...}; //... }; class DC :public BC{ //... void f(int x){//...} } void f(){ DC d; d.f;); }
时间: 2024-03-24 20:39:14 浏览: 13
这段代码存在一些语法错误,不过我猜测你的意思是想问这段代码的执行结果是什么。我假设你的意思是这样的:
```c++
class BC {
public:
virtual void f() {
//...
}
//...
};
class DC : public BC {
//...
void f(int x) {
//...
}
};
void f() {
DC d;
d.f();
}
```
这里定义了一个基类`BC`和一个派生类`DC`,`DC`中定义了一个名为`f`的新函数,参数为`int`类型。在`f`函数中没有使用`virtual`关键字,因此它不是虚函数,与基类中的虚函数`f`没有关系。
在`f`函数中创建了一个`DC`类的对象`d`,然后调用`d.f()`函数。由于`DC`类中的`f`函数没有使用`virtual`关键字,因此它不会覆盖基类`BC`中的虚函数`f`。由于`d`对象是`DC`类的对象,因此调用的是`DC`类中的`f`函数,而不是`BC`类中的虚函数`f`。
因此,这段代码的执行结果是调用`DC`类中的`f`函数,没有调用基类`BC`中的虚函数`f`。如果想要调用基类中的虚函数,需要在派生类中使用`virtual`关键字,并且在派生类中调用基类的虚函数。
相关问题
class BC {public: virtual void f() { //... } //...};class DC : public BC { //... void f(int x) { //... }};void f() { DC d; d.f();}
这段代码定义了一个基类`BC`和一个派生类`DC`,`DC`类中定义了一个名为`f`的新函数,参数为`int`类型。基类中的`f`函数是虚函数,在派生类中没有被重写,因此派生类`DC`会继承基类`BC`中的虚函数`f`。
在`f`函数中创建了一个`DC`类的对象`d`,然后调用`d.f()`函数。由于`DC`类中的`f`函数没有使用`virtual`关键字,因此它不会覆盖基类`BC`中的虚函数`f`。由于`d`对象是`DC`类的对象,但是调用的是基类`BC`中的虚函数`f`,这是因为`BC`中的`f`函数是虚函数,通过指向派生类对象的基类指针或引用调用虚函数时,会根据实际的对象类型来确定调用哪个版本的虚函数。
因此,这段代码的执行结果是调用基类`BC`中的虚函数`f`。
class BC{ int x; public: //...}; class DC: public BC {public: int f() const {return x;} };
这段代码中,BC是一个基类,DC是一个派生类。BC中有一个私有成员x,DC中有一个公有的成员函数f(),该函数返回x的值。但是由于x是BC的私有成员,DC无法直接访问x。这里需要使用继承来解决这个问题。DC通过public继承BC,将BC中的成员变量和成员函数都继承到DC中,然后就可以在DC中使用x了。所以DC中的f()函数可以访问x,并返回x的值。