Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.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++ 继承情况下静态函数的重新定义 类基 { 公众: 静态void func() { cout_C++_Scope_Static Functions - Fatal编程技术网

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