C++中結構體與類的區別

塵虛緣_KY發表於2016-06-19
學習了C++的物件導向,最常見的和寫的就是類結構體,下面主要介紹一下結構體和類的區別。
首先類是C++中物件導向獨有的,但是C和C++中都有結構體,下面我們來看一下C和C++中結構體的區別。這裡主要從封裝、多型、繼承、封裝和訪問許可權幾個方面來說。
1、C和C++中結構體的區別
(1)多型:C的結構體內不允許有函式存在,但是有預設的建構函式,就是把所有的成員屬性設定為0,不能自定義。但是C的結構體是沒有建構函式、解構函式、和this指標的,所以沒有多型而言;C++允許有內部成員函式,且允許該函式是虛擬函式可以多型。
(2)繼承:C語言的結構體是不可以繼承的,C++的結構體是可以從其他的結構體或者類繼承過來的,和類一樣,實現了程式碼的複用。
(3)封裝:C的結構體只是把資料變數給包裹起來了,並不涉及演算法,是一種“複合型別”,其功能基本與int ,double的用法相同,它主要解決多型別問題。而C++中是把資料變數及對這些資料變數的相關演算法給封裝起來,並且給對這些資料和類不同的訪問許可權。
(4)訪問許可權:C的結構體對內部成員變數的訪問許可權只能是public,而C++允許public,protected,private三種。
  以上三點都是表面的區別,實際區別就是程式導向和麵向物件程式設計思路的區別。
2.C++的結構體和C++類的區別
 主要是訪問許可權的區別:
(1)C++結構體內部成員變數及成員函式預設的訪問級別是public,而c++類的內部成員變數及成員函式的預設訪問級別是private。

(2) C++結構體的繼承預設是public,而c++類的繼承預設是private。

例項程式碼:

#include <iostream>
#include <string.h>
using namespace std;
struct student{
public:
	int ID;
	void function()
	{
		cout<<"The function is in struct! C++"<<endl;
	}
	virtual void show()
	{
		cout<<"virtual show student"<<endl;
	}
	int get_score()
	{
		return score;
	}
	student()
	{
		ID=10;
		age=20;
		score=88;
		cout<<"Construct student"<<endl;
	}
protected:
	int age;
private:
	int score;
};
struct student1:public student
{
public:
	char *name;
	student1()
	{
		name=new char[3];
		strcpy(name,"ky");
		cout<<"Construct student1 :"<<name<<endl;
	}
	void show()
	{
		cout<<"virtual in student1"<<endl;
	}
	~student1()
	{
		delete name;
		name=NULL;
		cout<<"~student1"<<endl;
	}
};
int main()
{
	student1 s1; //先執行父結構體的建構函式,在執行自己的;
	student  s;  //沒有繼承就直接執行自己的;
	s.show();
	s1.show();
	s.function();
	cout<<"ID:"<<s.ID<<"   NAME: "<<s1.name<<endl;
	cout<<"score: "<<s1.get_score()<<endl;
	s1.~student1();
	system("pause");
	return 0;
}
執行結果:



相關文章