从抽象基访问重载函数 class
Acessing overloaded function from an Abstract Base class
我知道以前有人以某种形式问过这个问题。但是我还是一头雾水。
假设我有两个 classes.
class A{
public:
void foo(int a, int b);
protected:
virtual void foo(int a) = 0;
}
class B : public class A{
void foo(int a);
}
现在,如果我想在 class A public 中使 class B 中的非虚函数可见......我该怎么做? ...换句话说,目前我可以用这种方式调用非虚函数
B b;
b.A::foo(3, 5);
我想避免这种情况 ^
以及把这个
using A::foo;
in public B 引用 A 中的虚函数....不是非虚函数...所以我认为这不是解决方案。
class A{
public:
void foo(int a, int b);
protected:
virtual void foo(int a) = 0;
};
class B : public A{
public:
using A::foo;
protected:
void foo(int a);
};
void f()
{
B b;
b.foo(1,2); // OK
b.foo(3); // error: ‘virtual void B::foo(int)’ is protected within this context
}
按预期工作。带有两个参数的 foo 是可调用的,带有一个参数的 foo 不是。
我知道以前有人以某种形式问过这个问题。但是我还是一头雾水。
假设我有两个 classes.
class A{
public:
void foo(int a, int b);
protected:
virtual void foo(int a) = 0;
}
class B : public class A{
void foo(int a);
}
现在,如果我想在 class A public 中使 class B 中的非虚函数可见......我该怎么做? ...换句话说,目前我可以用这种方式调用非虚函数
B b;
b.A::foo(3, 5);
我想避免这种情况 ^
以及把这个
using A::foo;
in public B 引用 A 中的虚函数....不是非虚函数...所以我认为这不是解决方案。
class A{
public:
void foo(int a, int b);
protected:
virtual void foo(int a) = 0;
};
class B : public A{
public:
using A::foo;
protected:
void foo(int a);
};
void f()
{
B b;
b.foo(1,2); // OK
b.foo(3); // error: ‘virtual void B::foo(int)’ is protected within this context
}
按预期工作。带有两个参数的 foo 是可调用的,带有一个参数的 foo 不是。