Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在不知道C+中基类名称的情况下调用子类中基类的成员+;?_C++_Function_Call_Superclass_Base Class - Fatal编程技术网

C++ 如何在不知道C+中基类名称的情况下调用子类中基类的成员+;?

C++ 如何在不知道C+中基类名称的情况下调用子类中基类的成员+;?,c++,function,call,superclass,base-class,C++,Function,Call,Superclass,Base Class,可能重复: 是否可以在不知道基类名称的情况下调用子类中的基类成员函数?(类似于在java中使用super关键字)C++没有标准的super关键字等价物。但是有一个特定于微软的\uuu super,我认为如果您使用visual studio,它也可以实现同样的效果 // deriv_super.cpp // compile with: /c struct B1 { void mf(int) {} }; struct B2 { void mf(short) {} void m

可能重复:


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

C++没有标准的super关键字等价物。但是有一个特定于微软的
\uuu 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)
   }
};

你怎么知道基类的名字?不,C++没有等价的<代码>超级< /代码>。因为它支持多重继承,
super
可以引用多个不同的类,而不仅仅是Java中的一个类。因为必须命名基类才能定义派生类,所以必须知道基类的名称(或者至少是名称)。那么,没有什么可以阻止您使用
typedef base\u class\u name super@JamesMcNellis:除了体面、品位、常识等,什么都没有。@JerryCoffin:有时候这是一种有用的技巧。考虑一个具有非常长的名称的基类,例如:代码> STD::条件::类型< /代码>,其中<代码> B1 和 B2是长类型名称,表达式可能是复杂的,并且所有的事物都可能是依赖的。我记得我做过几次,虽然我通常把typedef命名为
base\u type
或类似的东西,而不是
super
(因为我从未使用过这个“Java”东西)如果没有
\uu super::
?@steffen,如果
结构D
只有一个继承和一个不同的函数名,它就可以工作。在当前情况下,
mf
本身的第一次调用会导致无限递归,因为调用函数也与之匹配。如果
struct D
的函数名不是
mf
,它将生成一个编译器错误:
对“mf”的引用不明确。