簡體   English   中英

為什么在定義之前調用這些函數?

[英]How come these functions are called before being defined?

這是時間函數的cpp。 代碼在此time.cpp上定義了time.h文件的函數。 我的問題是:如果之后定義了這個函數中的函數,那么這個函數定義怎么可能呢? 謝謝

void Time::setTime(int hour, int minute, int second)
{
    sethour(hour);
    setminute(minute);
    setseconds(seconds);
}

void Time::sethour( int h)
{ ....

您不需要定義來調用函數,您只需要聲明。 編譯器對單獨的聲明很滿意。 鏈接器需要將生成的代碼,它需要的定義,但是你定義它們,只要你做到這一點並不重要。

在您的情況下,每個成員函數的聲明對所有其他成員函數都是可見的,即使在之后的類定義中也是如此:

class Time
{
   void setTime();  //setTime knows about sethour even if it's before
   void sethour();
};

在類之外,這不成立,這意味着在使用方法之前需要聲明。 宣言只是原型:

void foo();
void goo()
{
    foo(); //can call foo here even if it's just declared and not defined
}

大概是因為它們被聲明在某個地方(例如在頭文件中),這才是重要的。

最好想象編譯器以“一次通過”的方式運行; 它從上到下線性處理您的代碼。 因此,它需要知道函數在使用之前是存在的(即它們的名稱,參數和返回類型),以便確定調用者沒有做無效的事情。 但實際的功能定義(即其主體)與此任務無關。

您可以選擇何時定義它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM