2012-07-11 59 views
2

Possible Duplicate:
C++ equivalent of “super”?如何在不知道C++基类名称的情况下调用子类中的基类成员?

是否有可能在不知道基类的名称的情况下调用子类中的基类成员函数? (类似于在java中使用super关键字)

+3

你如何不知道基类的名字吗? – templatetypedef 2012-07-11 04:23:33

+0

不,C++没有'super'的等价物。由于它支持多重继承,所以'super'可以指代几个不同的类,而不仅仅是Java中的一个类。 – 2012-07-11 04:28:26

+2

由于必须命名基类来定义派生类,因此必须知道基类的名称(或至少_a_ name)。然后,没有任何东西阻止你从'typedef base_class_name super;'。 – 2012-07-11 04:32:29

回答

1

C++没有super关键字的标准等效项。但是,如果您使用的是Visual Studio,我认为可以实现同样的功能。

// deriv_super.cpp 
// compile with: /c 
struct B1 { 
    void mf(int) {} 
}; 

struct B2 { 
    void mf(short) {} 

    void mf(char) {} 
}; 

struct D : B1, B2 { 
    void mf(short) { 
     __super::mf(1); // Calls B1::mf(int) 
     __super::mf('s'); // Calls B2::mf(char) 
    } 
}; 

参见:msdn

+0

如果没有'__super ::',会不会这样做? – steffen 2012-07-11 05:30:41

+0

@steffen如果'struct D'只有单一的继承和一个不同的函数名,那么它会工作。在目前的情况下,首先调用'mf'本身会导致无限递归,因为调用函数也匹配相同。如果'struct D'的函数名不是'mf',则会产生一个编译器错误:''mf'的引用不明确。 – 2012-07-11 05:49:37

相关问题