編者:李國帥
qq:9611153 微信lgs9611153
時間:2011-11-18
自己在結構體的理解方面還是存在偏差的,結構體也是有構造和析構函數的。想當然的認爲它沒有面向對象的特徵是不對的。
公認區別:
從語法上,在C++中(只討論C++中), class和struct做類型定義時的區別:
(一)默認繼承權限。如果不明確指定,來自class的繼承按照private繼承處理,來自struct的繼承按照public繼承處理;
(二)成員的默認訪問權限。class的成員默認是private權限,struct默認是public權限。
(三)類是面向對象的,可以封裝各種函數,而且有自己的構造和析構函數,它是結構類型的自然延伸 。而結構是建立了用於聲明變量的一種新的數據類型,編譯器不爲結構定義保留內存空間,但卻爲類分配。
例子:
#include <iostream>
using namespace std;
#include <Windows.h>
struct/*class*/ xx
{
public:
xx()
{
m_x = 1;
cout<<1<<endl;
}
xx(int x)
{
m_x = x;
cout<<x<<endl;
}
//~xx(){
virtual ~xx(){
cout<<m_x<<endl;
}
_inline int print1()//隱式內聯函數,有的書中說不能包含開關和選擇語句,但是這裏可以。
{
switch(m_x)
{
case 1:
cout<<"switch 1"<<endl;
break;
}
if (m_x == 1)
{
cout<<"this is 1"<<endl;
}
else
{
cout<<m_x<<endl;
}
return 0;
}
int m_x;
};
struct yy:public xx //繼承
{
int f(){
m_x = 200;
cout<<m_x<<endl;
return 0;
};
};
int _tmain(int argc, _TCHAR* argv[])
{
xx x1;
x1.print1();
xx x2(100);
x2.print1();
yy y1;
y1.f();
y1.print1();
system("pause");
return 0;
}