相关疑难解决方法(0)

为什么隐藏虚拟功能?

我有以下课程:

class A {
public:
    virtual void f() {}
};


class B : public A{
public:
    void f(int x) {}
};
Run Code Online (Sandbox Code Playgroud)

如果我说

B *b = new B();
b->f();
Run Code Online (Sandbox Code Playgroud)

编译器说错误C2660:'B :: f':函数不带0个参数.不应该B中的函数超载它,因为它是一个虚函数?虚拟函数会像这样被隐藏吗?

编辑:我的确意味着从A继承B,它显示了相同的行为.

c++ virtual hide

22
推荐指数
2
解决办法
2万
查看次数

重载函数隐藏在派生类中

在派生类中如果我从Base类重新定义/重载函数名,
那么这些重载函数对派生类是不可访问/可见的.
为什么是这样??

如果我们不在派生类的基类中重载oveloaded函数,那么该函数的所有重载版本都可用于派生类
对象,为什么这个?
这背后的原因是什么?如果您在编译器和链接器级别解释这
将对我更有帮助.是不是可以支持这种scinario?

Edited  
For examble:

class B  
{  

  public: 
     int f() {}
     int f(string s) {}
};

class D : public B
{
   public:
    int f(int) {}
};

int main()
{
   D d;
   d.f(1);
   //d.f(string);  //hidden for D
} 

Now object 'd' can't access f() and f(string).

c++ overloading

15
推荐指数
2
解决办法
5295
查看次数

标签 统计

c++ ×2

hide ×1

overloading ×1

virtual ×1