#include <iostream>
using namespace std;
namespace xyz {
class Base {
public:
bool configure (double a) {
cout << "Do nothing. a is currently equal to: " << a << endl;
return true;
}
virtual bool update(float& a)=0;
};
}
class Child : public xyz::Base {
public:
virtual bool update(float& a) {
a = a+0.5;
cout << "Updated" << endl;
return false;
}
};
int main() {
cout << "Hello World" << endl;
Child median;
float a = 3.0;
median.update(a);
median.xyz::Base::configure(a);
return 0;
}
我想我在这里错过了一些 C++ 概念。
我完全不知道
median.xyz::Base::configure(a);
这句话是怎么回事。这是一个类实例(对象)median
点命名空间::xyz
然后:父类Base
的符号,我只用于静态类方法(但configure (double a)
甚至不是静态的。 ..).
如何解释这是否有效?
这是来自机器人库的简化 MWE,我对其进行了修改,使其更加通用(https://github.com/ANYbotics/grid_map/blob/master/grid_map_filters/include/grid_map_filters/MedianFillFilter.hpp)
您在这里看到的是显式调用函数的基类版本。例如,如果您有
namespace xyz {
class Base {
public:
bool configure (double a) {
cout << "Do nothing. a is currently equal to: " << a << endl;
return true;
}
virtual bool update(float& a)=0;
};
}
class Child : public xyz::Base {
public:
virtual bool update(float& a) {
a = a+0.5;
cout << "Updated" << endl;
return false;
}
bool configure (double a) {
cout << "In Child::configure. a is currently equal to: " << a << endl;
return true;
}
};
int main() {
cout << "Hello World" << endl;
Child median;
float a = 3.0;
median.update(a);
median.configure(a);
return 0;
}
然后
median.configure(a);
将打印 In Child::configure. a is currently equal to: 3.5
,因为它正在调用该函数的 Child
版本。通过使用
median.xyz::Base::configure(a);
它将打印
Do nothing. a is currently equal to: 3.5
,因为它现在明确使用该函数的 Base
版本。您可以在此实时示例中看到输出变化。