C++中結構體與類的區別
學習了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。
首先類是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;
}
執行結果:
相關文章
- C# 結構體與類的區別C#結構體
- C++ 結構體struct和共同體union的區別C++結構體Struct
- C++ protected許可權成員以及類和結構體區別C++結構體
- C#中類和結構的一個區別...C#
- 類與結構體結構體
- C++中結構體的sizeofC++結構體
- C/C++中的結構體C++結構體
- Swift 類與結構體Swift結構體
- Swift,結構體與類Swift結構體
- C與C++中struct使用的區別C++Struct
- Java中類與物件的關係與區別Java物件
- 類中的結構體或列舉等型別的前置宣告結構體型別
- C++中new與malloc的10點區別C++
- StringUtils類中isEmpty與isBlank的區別
- C/C++——C++中new與malloc的10點區別C++
- c與c++的區別C++
- JAVA 與 C++ 的區別JavaC++
- [C++]結構體、共同體和列舉型別C++結構體型別
- Java中抽象類與介面的區別Java抽象
- 資料結構中樹和森林的區別資料結構
- iOS Swift結構體與類的方法排程iOSSwift結構體
- C++之函式模板與類别範本的區別(三)C++函式
- date類與calendar的區別
- Python中實現結構體類Python結構體
- c#中結構體和類的比較C#結構體
- OC中類的結構
- JQ操作類與JS操作類的區別JS
- C++ 結構體例項和類例項的初始化C++結構體
- C++結構體排序C++結構體排序
- 第五章——結構體與類(序)結構體
- 關於C與C++的區別C++
- C++指標與引用的區別C++指標
- 偽類與偽元素的區別
- C++中的return和exit區別C++
- C++中 struct 和 class 的區別C++Struct
- C++中struct 和 class的區別C++Struct
- 引用的例子 C C++ 中區別C++
- C++中的選擇結構C++