我想在下面的代碼中實現「這一行」。最合理的方法是設置GetDog靜態,但是我不能使用「this」。有沒有辦法避開它? (不,因爲我想出來,有幾行的問題不相關)不聲明類的調用函數
#include <iostream>
class Dog
{
public:
static int a;
Dog& GetDog(int k)
{
this->a = k;
return *this;
}
int bark()
{
return a*a;
}
};
int Dog::a=0;
int main()
{
Dog puppy;
int i = puppy.GetDog(4).bark();
cout<<i<<endl;
cout<<Dog::a<<endl;
//i = Dog::GetDog(6).bark(); //this line
return 0;
}
不,這樣做有很大的優勢(僅僅是聲明一個類是不要求),但我看到它在使用我正在使用一些軟件包。我有點想了解它是如何完成的。
class EXOFastFourierTransformFFTW
{
public:
static EXOFastFourierTransformFFTW& GetFFT(size_t length);
virtual void PerformFFT(const EXODoubleWaveform& aWaveform, EXOWaveformFT& aWaveformFT);
...
int main()
{
EXODoubleWaveform doublewf;
EXOWaveformFT wfFT;
...
EXOFastFourierTransformFFTW::GetFFT(doublewf.GetLength()).PerformFFT(doublewf,wfFT);
...
這個靜態函數的用法也出現在GEANT4,這可能是由物理學家寫的,所以他們可能不會做最聰明的事情編程。我仍然想要如果這樣做有其他優點,但。
從投票下來之前,我可以看到,這可能不是一個正常的方法,因爲我認爲它是。在做之前請評論。
你的標題說,C(爲什麼),但你標記它的C++和使用C++。 – chris
函數名稱中的'C:'的含義 –
你究竟在問什麼?你認爲哪個班沒有申報? 'EXOFastFourierTransformFFTW'是提供的代碼中聲明的類,但它不是_instantiated_類。運行時不存在「EXOFastFourierTransformFFTW」類型的對象,這非常好,因爲您不需要該類型的對象來調用靜態函數'GetFFT'。這一切都檢查出來,但涉及到我的部分是調用代碼忽略從'GetFFT'返回的'EXOFastFourierTransformFFTW&'。忽略返回的引用是不好的mojo .... – Shaz