㈠ 在c語言中怎樣用c++類中的對象調用c++類中的方法
這個問題很有意思,我之前還沒碰到過呢,我幫你在全球最大的編程論壇stackoverflow上搜了一個答案:
這個答案大意是說,C語言沒有this指針,所以要自己寫一個wrap API來封裝C++的對象。
這個論壇高手雲集,包括很多業界大拿,所以這個答案還是很可信的。下面的api.h 就是你要寫的wrap API
C has no thiscall notion. The C calling convention doesn't allow directly calling C++ object member functions.
Therefor, you need to supply a wrapper API around your C++ object, one that takes the this pointer explicitly, instead of implicitly.
Example:
// C.hpp
// uses C++ calling convention
class C {
public:
bool foo( int arg );
};
C wrapper API:
// api.h
// uses C calling convention
#ifdef __cplusplus
extern "C" {
#endif
void* C_Create();
void C_Destroy( void* thisC );
bool C_foo( void* thisC, int arg );
#ifdef __cplusplus
}
#endif
Your API would be implemented in C++:
#include "api.h"
#include "C.hpp"
void* C_Create() { return new C(); }
void C_Destroy( void* thisC ) {
delete static_cast<C*>(thisC);
}
bool C_foo( void* thisC, int arg ) {
return static_cast<C*>(thisC)->foo( arg );
}
㈡ 我想弄懂為什麼C語言沒有面向對象的思想,明明有結構體啊,而且我試驗了結構體能實現類的功能
你後綴名都用CPP了。。。哪裡是C語言。。C++也是有結構體的好伐。。C和C++的結構體不是一回事,你把後綴名改成c,VS就會用C模式編譯。或者直接用gcc進行編譯,然後就該報錯了
不過C確實可以實現面向對象,典型的glib的gobject就是。。
㈢ c語言和python區別
1、語言類型不同。
Python是一種動態類型語言,又是強類型語言。它們確定一個變數的類型是在您第一次給它賦值的時候。C是靜態類型語言,一種在編譯期間就確定數據類型的語言。大多數靜態類型語言是通過要求在使用任一變數之前聲明其數據類型來保證這一點的。
2、對象機制不同。
Python中所有的數據,都是由對象或者對象之間的關系表示的,函數是對象,字元串是對象,每個東西都是對象的概念。每一個對象都有三種屬性:實體,類型和值。
C中沒有對象這個概念,只有「數據的表示」,比如說,如果有兩個int變數a和b,想比較大小,可以用a==b來判斷,但是如果是兩個字元串變數a和b,就不得不用strcmp來比較了,因為此時,a和b本質上是指向字元串的指針,如果直接用==比較,那比較的實際是指針中存儲的值地址。
3、變數類型不同。
python六個標準的數據類型:Number數字、String字元串、List列表、Tuple元祖、Sets集合、Dictionary字典,數字類型有四種類型:整數、布爾型、浮點數和復數。C語言也可分四類:基本類型、枚舉類型、void的類型、派生類型。基本類型:整數類型、浮點類型。
㈣ C語言有像JAVA那樣的方法和類嗎
C語言沒有class。只有struct。而且struct不能定義function。
C語言不能像java一樣定義class,但是C++可以。
C是面象過程的,而java是面象對象的。
㈤ C語言中沒有「類」概念嗎
類是體現封裝性的,c語言中沒有類,在c++\java\c#中使用,實現過程就像結構體一樣,類能夠實現對內部數據的隱藏,提供一些公有函數,實現某種功能.
㈥ c語言里為什麼沒有類
類是c++才有的,是從c中的結構體發展而來的。所以說c裡面是沒有類的,相比之下類更有封裝性好的特點。
㈦ 計算機C語言與計算機C++語言有什麼區別
二者目前主要應用於電信部門
c++,面向對象程序設計(當然也可以過程設計哦)。網路游戲開發
c
,面向過程程序設計
c++目前市場上通用寫。個人愚見
㈧ 為什麼C語言不能按照面向對象的思想來編程。
當然可以用C語言進行面向對象編程。
面向對象本身是一種思想,而用哪種語言實現只是一種技術手段。事實上思想和技術的關系本身就是class和object的關系。
class oo {
//這是面向對象的思想類
};
oo java; //java是oo的一個具體的技術實現
oo cxx; //c++是oo的一個具體的技術實現
拿Windows系統來講,它是有C語言編寫的,但是使用的卻是面向對象的思想,這方面可以參考reactos(一個免費開源的用於大學教授操作系統原理的windows系統)。
舉一個例子也許更實際一些,比如,操作系統有兩種操作界面,一種是GUI界面,一種是控制台界面,在windows平台上編寫一個程序,在cmd中運行時,執行控制台界面的代碼,在GUI中運行的時候,執行圖形界面的代碼。這實際上也算是一種面向對象編程中的多態實例。以下示例代碼在vc6.0編譯通過。
#include<stdio.h>
#include<tchar.h>
#include<windows.h>
#include<TLHELP32.H>
charwhat_shell_run()
{
HANDLEhSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hSnap==0){
return_T('E');
}
PROCESSENTRY32pe32={0};
pe32.dwSize=sizeofpe32;
DWORDdwSelfPid=GetCurrentProcessId();
DWORDdwParentPid=~0;
for(BOOLbLoop=Process32First(hSnap,&pe32);bLoop!=FALSE;bLoop=Process32Next(hSnap,&pe32))
{
if(dwSelfPid==pe32.th32ProcessID){
dwParentPid=pe32.th32ParentProcessID;
break;
}
}
if(dwParentPid==~0)return_T('U');
for(bLoop=Process32First(hSnap,&pe32);bLoop!=FALSE;bLoop=Process32Next(hSnap,&pe32))
{
if(dwParentPid==pe32.th32ProcessID){
if(lstrcmpi(pe32.szExeFile,_T("cmd.exe"))==0)
{
CloseHandle(hSnap);
return_T('C');
}elseif(lstrcmpi(pe32.szExeFile,_T("explorer.exe"))==0){
CloseHandle(hSnap);
return_T('G');
}
}
}
CloseHandle(hSnap);
return_T('U');
}
voidconsole(void){
printf("這是一控制台程序 ");
}
voidgui(void){
MessageBox(0,_T("這是一個GUI程序"),_T("GUI"),MB_OK);
}
intmain()
{
charch=what_shell_run();
switch(ch)
{
case'C':
console();break;
case'G':
gui();break;
}
return0;
}
㈨ c語言描述類 對象 方法 屬性四者之間區別與聯系
對象是人們要進行研究的任何事物,它不僅能表示具體的事物,還能表示抽象的規則、計劃或事件。具有相同或相似性質的對象的抽象就是類。因此,對象的抽象是類,類的具體化就是對象,也可以說類的實例化,ASP中set
classname=new
classd()
就是實例化一個類;
對象有它的屬性和方法,舉例說明,人是一個對象,人的長相和身材就是對象的屬性,而說話動作就是對象的方法。
對象的屬性也可能是一組集合,舉例說明:人這個對象的外表屬性包含:長相,身高,體形,氣質等。
㈩ c語言2級中象與類是甚麼意思
通俗的講,對象是任何1個存在的,可被計算機用某種情勢表達的實物。比如說,1份文件,1首歌,1個按鈕等等,只要是計算機中存在的,都可以成為對象。而類,就是某1類對象的總稱。比如「某個人」,在計算機里是對象,而「人」,是1類的表述。