struct結構體是否有構造和析構函數?

編者:李國帥

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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章