【发布时间】:2021-10-29 09:06:03
【问题描述】:
这段代码编译的原因是什么:
#include <iostream>
using namespace std;
class being {
public:
void running(char c) {
cout << "No one know ";
}
};
class human :public being {
public:
using being::running;
void running(char y) {
cout << "I am a human";
}
};
int main() {
human o;
o.running('A');
return 0;
}
the output : "I am a human"
我的意思是(我期待有错误(人类类中的重新定义函数)) 像这样 : 这段代码编译:
#include <iostream>
using namespace std;
class being {
public:
int v;
};
struct human :public being {
public:
double v;
};
int main() {
human o;
o.v = 55.2;
return 0;
}
但是当我添加(使用being::v)
#include <iostream>
using namespace std;
class being {
public:
int v;
};
struct human :public being {
public:
using being::v;
double v;
};
int main() {
human o;
o.v = 55.2;
return 0;
}
出现错误:error C2086: 'int being::v': redefinition
为什么第一个代码中没有出现这个错误?
【问题讨论】:
-
你为什么期待这个? (它不是;“使用”这个词没有正常的英语含义。)
标签: c++ language-lawyer derived-class redefinition using-declaration