C++ 继承情况下静态函数的重新定义 类基 { 公众: 静态void func() { cout
它不会被重新定义,如果它被重新定义,那么由于一个定义规则,您将有一个编译错误。这里有两个函数,一个是成员函数,一个是静态函数。C++ 继承情况下静态函数的重新定义 类基 { 公众: 静态void func() { cout,c++,scope,static-functions,C++,Scope,Static Functions,它不会被重新定义,如果它被重新定义,那么由于一个定义规则,您将有一个编译错误。这里有两个函数,一个是成员函数,一个是静态函数。d.func()是成员函数(如所示)。另一个函数是base::func(),它是静态函数(如::所示)。如果它被重新定义,您将由于一个定义规则而产生编译错误。这里有两个函数,一个是成员函数,一个是静态函数。d.func()是成员函数(如所示)。另一个函数是base::func(),这是静态函数(如:所示)。它不会被重新定义,否则您将违反一个定义规则 您看到的是“范围”:
d.func()
是成员函数(如
所示)。另一个函数是base::func()
,它是静态函数(如::
所示)。如果它被重新定义,您将由于一个定义规则而产生编译错误。这里有两个函数,一个是成员函数,一个是静态函数。d.func()
是成员函数(如
所示)。另一个函数是base::func()
,这是静态函数(如:
所示)。它不会被重新定义,否则您将违反一个定义规则
您看到的是“范围”:如果在内部作用域中定义了名称,则会在外部作用域中隐藏(隐藏)相同名称的所有定义 您仍然可以在外部范围(基类)中引用具有明确限定条件的函数:
class base
{
public:
static void func()
{
cout<<"in base class\n";
}
};
class derived: public base
{
public:
void func()
{
cout<<"In derived class\n";
}
};
main() {
derived d;
d.func();
}
要将外部作用域中的内容添加到重载集,请使用和-声明:
base::func
如果执行此操作,则在使用derived::func()
时将调用base::func
,在使用derivedobject.func()
时将调用derived::func
,它不会被重新定义,否则将违反一个定义规则
您看到的是“范围”:
如果在内部作用域中定义了名称,则会在外部作用域中隐藏(隐藏)相同名称的所有定义
您仍然可以在外部范围(基类)中引用具有明确限定条件的函数:
class base
{
public:
static void func()
{
cout<<"in base class\n";
}
};
class derived: public base
{
public:
void func()
{
cout<<"In derived class\n";
}
};
main() {
derived d;
d.func();
}
要将外部作用域中的内容添加到重载集,请使用和-声明:
base::func
如果这样做,则在使用derived::func()
时将调用base::func
,在使用derivedobject.func()
时将调用derived::func
,您正在经历“阴影”。成员函数也可能发生同样的情况:
using base::func;
因为在调用站点,b->
指向base
,将调用base::func
而不是derived::func
。在编译时,编译器只知道“b”是base
大多数人期望并想要动态行为:
void callFunc(base* b) {
b->func();
}
int main() {
derived d;
callFunc(&b);
}
#包括
结构动物{
const char*say(){return”?“;}
};
结构狐狸:公共动物{
const char*say(){返回“一个戒指叮叮”;}
};
结构猫:公共动物{
const char*say(){返回“喵”;}
};
void whatdesitsay(常量字符*名称,动物*动物){
std::cout您正在经历“阴影”。成员函数也可能发生同样的情况:
using base::func;
因为在调用站点,b->
指向base
,将调用base::func
而不是derived::func
。在编译时,编译器只知道“b”是base
大多数人期望并想要动态行为:
void callFunc(base* b) {
b->func();
}
int main() {
derived d;
callFunc(&b);
}
#包括
结构动物{
const char*say(){return”?“;}
};
结构狐狸:公共动物{
const char*say(){返回“一个戒指叮叮”;}
};
结构猫:公共动物{
const char*say(){返回“喵”;}
};
void whatdesitsay(常量字符*名称,动物*动物){
标准::cout