在派生类中如果我从Base类重新定义/重载函数名,
那么这些重载函数对派生类是不可访问/可见的.
为什么是这样??
如果我们不在派生类的基类中重载oveloaded函数,那么该函数的所有重载版本都可用于派生类
对象,为什么这个?
这背后的原因是什么?如果您在编译器和链接器级别解释这
将对我更有帮助.是不是可以支持这种scinario?
Edited
For examble:
class B
{
public:
int f() {}
int f(string s) {}
};
class D : public B
{
public:
int f(int) {}
};
int main()
{
D d;
d.f(1);
//d.f(string); //hidden for D
}
Now object 'd' can't access f() and f(string). const int t=5;
char buf[t+5];
Run Code Online (Sandbox Code Playgroud)
当我编译它时,在C中给出错误但在C++中没有!
有人可以解释一下原因吗?
注意:我知道const默认为'C++'中的内部链接,其中'C'默认为外部链接.它与上述情况有什么关系吗?
class X
{
int i;
public:
X(int m) : i(m) {};
X(const X& x)
{
//cout "copy constructor is called\n";
}
const X opearator++(X& a,int)
{
//cout "X++ is called\n";
X b(a.i);
a.i++;
return b;
}
void f(X a)
{ }
};
int main()
{
X a(1);
f(a);
a++;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这里当调用函数'f'时,复制构造函数将按预期调用.在++的情况下,调用operator ++函数,但是当它返回"不调用复制构造函数"时.为什么"从函数'运算符++'返回时没有调用复制构造函数?