關於類成員函數調用


如果在不實例化一個類的情況下直接調用此類的成員函數(靜態和非靜態的)?調用形式是什么?有什么限制?

請大牛詳解下,並列舉例子,定不勝感激

11 个解决方案

#1


靜態成員數調用不需要實例化類,於普通全局函數的區別在於名字空間不同,可以加上訪問權限控制。 
your_class::static_member_funciton(its paramters);


非靜態成員函數需要類的實例來調用。 

#2


yourClassName::yourStatic_functionName(yout_WparamType wparam);

#3


靜態的調用如上所說了!

其他普通成員需要實例化對象來進行調用!

#4


定義類的靜態成員函數有什么要求?

引用 3 樓 max_min_ 的回復:
靜態的調用如上所說了!

其他普通成員需要實例化對象來進行調用!




定義類的靜態成員函數有什么要求?

#5


引用 4 樓 weiqiyun1986 的回復:
定義類的靜態成員函數有什么要求?

Quote: 引用 3 樓 max_min_ 的回復:

靜態的調用如上所說了!

其他普通成員需要實例化對象來進行調用!




定義類的靜態成員函數有什么要求?


類似一個全局的函數,調用靜態成員

#6


引用 4 樓 weiqiyun1986 的回復:
定義類的靜態成員函數有什么要求?

Quote: 引用 3 樓 max_min_ 的回復:

靜態的調用如上所說了!

其他普通成員需要實例化對象來進行調用!




定義類的靜態成員函數有什么要求?
不能直接使用該類的非靜態成員,和非靜態成員函數。

#7


非靜態,沒法合法實現,不過你可以鑽空子
比如
你有一個類
class Point2 
定義如下:
namespace testPoint{
class Point2{
public:
Point2():x(0),y(0){};
Point2(int x0,int y0):x(x0),y(y0){};
void Show(){cout<<x<<","<<y<<endl;};
private:
int x,y;
};

struct Point
{
int x,y;
};
void test(){
   Point p={10,20};
   Point2 &p2 =reinterpret_cast<Point2 &>(p);
   p2.Show();
}
}

大概只能類似,這樣做了,因為不能實例化,其實就是不可以創建對象,即不能定義變量,包括動態分配內存。
沒有變量,就沒有辦法,給函數隱藏參數,傳遞 this指針,就沒法調用非靜態成員函數。

你就只能,去鑽空子了,就像上面那樣。
用另一個和這個類結構相仿的類型,定義一個變量 ,冒充那個類型的對象。
來調用非靜態成員函數。


#8


靜態成員函數,不需要實例化就可以調用,調用的時候加上類的作用域就可以了。
對於非靜態成員函數,需要實例化之后才能進行調用。

#9


引用 8 樓 cjfdqchwh 的回復:
靜態成員函數,不需要實例化就可以調用,調用的時候加上類的作用域就可以了。
對於非靜態成員函數,需要實例化之后才能進行調用。


成員函數,只要不用到成員變量,那么不實例化也是可以調用的。
像:
class A
{
public:
    void doSomething()
    {
         cout<<"doSomething"<<endl;
     }
}

int main()
{
    A* p = NULL;
    p->doSomething();
    return 0;
}

因為成員函數最終也是被編譯成全局函數的,只是會多傳遞一個this指針,只要不用這個this指針,就不會出錯。

#10


引用 9 樓 woshinia 的回復:
Quote: 引用 8 樓 cjfdqchwh 的回復:

靜態成員函數,不需要實例化就可以調用,調用的時候加上類的作用域就可以了。
對於非靜態成員函數,需要實例化之后才能進行調用。


成員函數,只要不用到成員變量,那么不實例化也是可以調用的。
像:
class A
{
public:
    void doSomething()
    {
         cout<<"doSomething"<<endl;
     }
}

int main()
{
    A* p = NULL;
    p->doSomething();
    return 0;
}

因為成員函數最終也是被編譯成全局函數的,只是會多傳遞一個this指針,只要不用這個this指針,就不會出錯。


9樓講的非常對,這樣的確可以調用 類成員函數,也不會出錯。

#11


如果你不創建對象而調用了其某個成員函數,且沒有出錯,說明你應該把這個成員函數做成靜態的。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com