C++ 从派生类对象访问具有相同签名的基类fn

C++ 从派生类对象访问具有相同签名的基类fn,c++,derived-class,base-class,C++,Derived Class,Base Class,是否可以使用派生类对象访问与派生类函数具有相同签名的基类函数?。这是我在下面陈述的一个例子 class base1 { public: void test() {cout<<"base1"<<endl;}; }; class der1 : public base1 { public: void test() {cout<<"der1"<<endl;}; }; int main() { der1 obj; obj.

是否可以使用派生类对象访问与派生类函数具有相同签名的基类函数?。这是我在下面陈述的一个例子

class base1 {
public:
    void test()
    {cout<<"base1"<<endl;};
};

class der1 : public base1 {
public:
    void test()
    {cout<<"der1"<<endl;};
};

int main() {
der1 obj;
obj.test(); // How can I access the base class 'test()' here??
return 0;
}
classbase1{
公众:
无效测试()

{cout您需要完全限定方法名,因为它与继承的名称冲突


使用obj.base1::test()

class base1
{
    public:
        void test()
        {
            cout << "base1" << endl;
        };
};

class der1 : public base1
{
    public:
        void test()
        {
            cout << "der1" << endl;
        };
};

int main()
{
    der1 obj;
    obj.test(); // How can I access the base class 'test()' here??
    return 0;
}
在基类中

可以使用:

((base)obj).test();

形式术语是“重写”,因为签名匹配。否则您会说派生的“隐藏”基类方法。在这两种情况下,都没有“继承的方法名”现在,我怀疑正确的术语是“重写”还是“隐藏”。在C++标准中,“重写”只用于虚函数,在10.2个成员名称查找中,该标准表示:“如果一个子对象A是B’@ @ MsAlter的基类子对象,则在一个子对象B中,成员名称F隐藏成员名称F:这绝对不是“超越”。。这仅适用于虚拟函数。可能应该删除“override”标记。我不是100%确定,但我相信正确的术语是“hide”而不是override。@Styne666请不要在“编辑摘要”中粗鲁无礼。这对每个人都是可见的。请阅读“任何时候都需要礼貌;粗鲁是不能容忍的”
((base)obj).test();