當前位置:首頁 » 編程語言 » c語言的public

c語言的public

發布時間: 2022-08-07 04:40:24

① c++中,public 與 private有什麼區別什麼時候用與c語言中有何相似之處求大神詳解,通俗易懂

public下面的是公有成員,對象外的所有程序都能訪問這些成員,private下的是私有成員,只有對象內部可以訪問。
以數組類為例,如果我們要自己設計一個數組類,提供插入Insert、刪除Remove等操作。那麼Insert和Remove作為這個類的函數就應該用public,否則使用這個數組類的程序就無法使用這些功能。在實現這個數組類的時候,我們需要用一個整型變數記錄當前數組個數,我們不希望這個變數能被使用者隨意修改,而是在使用Insert和Remove的時候才修改,那麼就把這個變數放在private下面聲明,這樣使用這個數組類的程序就不能直接修改這個變數的值,防止這個類的數據發生錯亂。
與C語言沒有什麼可比性,公有成員和私有成員是面向對象的程序設計語言才有的概念,而C語言是面向過程的。

② 在c語言中public time()什麼意思

這里的public指的是訪問許可權,time()應該是一個構造函數,因為沒有返回類型的定義,所以
public time()的意思是訪問許可權為public的構造函數

③ c語言中public:是什麼意思啊

public:定義一個全局變數。

全局變數是編程術語中的一種,源自於變數之分。

變數分為局部與全局,局部變數又可稱之為內部變數。由某對象或某個函數所創建的變數通常都是局部變數,只能被內部引用,而無法被其它對象或函數引用。

全局變數既可以是某對象函數創建,也可以是在本程序任何地方創建。全局變數是可以被本程序所有對象或函數引用。

(3)c語言的public擴展閱讀:

全局變數的存在主要有以下一些原因:

1、使用全局變數會佔用更多的內存(因為其生命期長),不過在計算機配置很高的今天,這個不應該算什麼問題,除非使用的是巨大對象的全局變數,能避免就一定要避免。

2、使用全局變數程序運行時速度更快一些(因為內存不需要再分配),同樣也快不了多少。

3、對於局部變數的名字空間污染,這個在不使用太多變數時是可以避免的。

4、當全局變數與局部變數重名的時候,起作用的是局部變數,全局變數被屏蔽掉。

5、還可以用extern在函數外對全局變數聲明,使全局變數的作用域從聲明處到文件的結束。

④ C++中類型定義中的public與 private的區別

雖然兩者都可以捆綁行為。

但是,理解不一樣。

struct,就是對程序員全局可見的數據與方法。簡化數據邏輯結構的設計。可以說是一種自定義的數據結構。

而class,則是將數據與方法封裝,即讓行為與數據一致。則是一種編程方法。即客觀世界在代碼世界中的體現。體現的是一種編程思想。

首先,討論這個問題應該僅從語法上討論,如果討論不同人之間編程風格上的差異,那這個問題是沒有答案的。畢竟不同的人偏好不同。

從語法上,在C++中(只討論C++中)。class和struct做類型定義時只有兩點區別:

(一)默認繼承許可權。如果不明確指定,來自class的繼承按照private繼承處理,來自struct的繼承按照public繼承處理;

(二)成員的默認訪問許可權。class的成員默認是private許可權,struct默認是public許可權。

除了這兩點,class和struct基本就是一個東西。語法上沒有任何其它區別。

不能因為學過C就總覺得連C++中struct和class都區別很大,下面列舉的說明可能比較無聊,因為struct和class本來就是基本一樣的東西,無需多說。但這些說明可能有助於澄清一些常見的關於struct和class的錯誤認識:

(1)都可以有成員函數;包括各類構造函數,析構函數,重載的運算符,友元類,友元結構,友元函數,虛函數,純虛函數,靜態函數;

(2)都可以有一大堆public/private/protected修飾符在里邊;

(3)雖然這種風格不再被提倡,但語法上二者都可以使用大括弧的方式初始化:A a = {1, 2, 3};不管A是個struct還是個class,前提是這個類/結構足夠簡單,比如所有的成員都是public的,所有的成員都是簡單類型,沒有顯式聲明的構造函數。

(4)都可以進行復雜的繼承甚至多重繼承,一個struct可以繼承自一個class,反之亦可;一個struct可以同時繼承5個class和5個struct,雖然這樣做不太好。

(5)如果說class的設計需要注意OO的原則和風格,那麼沒任何理由說設計struct就不需要注意。

(6)再次說明,以上所有說法都是指在C++語言中,至於在C里的情況,C里是根本沒有「class」,而C的struct從根本上也只是個包裝數據的語法機制。

---------------------------------------------------------------

最後,作為語言的兩個關鍵字,除去定義類型時有上述區別之外,另外還有一點點:「class」這個關鍵字還用於定義模板參數,就像「typename」。但關鍵字「struct」不用於定義模板參數。

來源:csdn.net

(個人認為最後一段是毫無意義的,因為C++中用來定義模板參數的「class」關鍵字並非代表「類」。olivue_antil)

----------------------------------------------

如果沒有多態和虛擬繼承,在C++中,struct和class的存取效率完全相同!簡單的說就是,存取class的data member和非virtual function效率和struct完全相同!不管該data member是定義在基類還是派生類的。

如果不是為了和C兼容,C++中就不會有struct關鍵字。因此建議是:如果不需要與C兼容或傳遞參數給C程序,不要在C++中用struct。

注意class的data member在內存中的布局可不一定是data member的申明次序。C++只保證處於同一個access section的data member按照申明次序排列。

-- 《Inside The C++ Object Model》

因為C++要兼容C,C++中的struct是從C中繼承過來的。

C中的struct可以用來定義一種數據類型,但C是一種面向過程的語言,沒有面向對象的思想,那麼struct在C語言中自然沒有面向對象的概念。它僅僅能定義一種類型。

最初學習C++的時候覺得struct和C中的是一樣的,但後來發現struct也可以定義成員函數,研究以後發現:C++中的struct還可以:繼承,實現多態。

但是你如果簡單的認為struct和class是完全一樣的就錯了,在網上經過查找發現,它們還是有細微差別的:

1)默認的繼承訪問許可權。struct是public的,class是private的。

如果不知道什麼是public繼承,什麼是private繼承的,可以去查書,這里暫不討論。

你可以寫如下的代碼:

struct A

{

char a;

};

struct B : A

{

char b;

};

這個時候B是public繼承A的。如果都將上面的struct改成class,那麼B是private繼承A的。這就是默認的繼承訪問許可權。所以我們在平時寫類繼承的時候,通常會這樣寫:

struct B : public A

就是為了指明是public繼承,而不是用默認的private繼承。

當然,到底默認是public繼承還是private繼承,取決於子類而不是基類。我的意思是,struct可以繼承class,同樣class也可以繼承struct,那麼默認的繼承訪問許可權是看子類到底是用的struct還是class。如下:

struct A{};

class B : A{}; //private繼承

struct C : B{}; //public繼承

2)struct作為數據結構的實現體,它默認的數據訪問控制是public的,而class作為對象的實現體,它默認的成員變數訪問控制是private的。

注意我上面的用詞,我依舊強調struct是一種數據結構的實現體,雖然它是可以像class一樣的用。我依舊將struct里的變數叫數據,class內的變數叫成員,雖然它們並無區別。其實,到底是用struct還是class,完全看個人的喜好,你可以將你程序里所有的class全部替換成struct,它依舊可以很正常的運行。但我給出的最好建議,還是:當你覺得你要做的更像是一種數據結構的話,那麼用struct,如果你要做的更像是一種對象的話,那麼用class。

當然,我在這里還要強調一點的就是,對於訪問控制,應該在程序里明確的指出,而不是依靠默認,這是一個良好的習慣,也讓你的代碼更具可讀性。

說到這里,很多了解的人或許都認為這個話題可以結束了,因為他們知道struct和class的「唯一」區別就是訪問控制。很多文獻上也確實只提到這一個區別。

但我上面卻沒有用「唯一」,而是說的「最本質」,那是因為,它們確實還有另一個區別,雖然那個區別我們平時可能很少涉及。那就是:「class」這個關鍵字還用於定義模板參數,就像「typename」。但關鍵字「struct」不用於定義模板參數。這一點在Stanley B.Lippman寫的Inside the C++ Object Model有過說明。

問題討論到這里,基本上應該可以結束了。但有人曾說過,他還發現過其他的「區別」,那麼,讓我們來看看,這到底是不是又一個區別。

還是上面所說的,C++中的struct是對C中的struct的擴充,既然是擴充,那麼它就要兼容過去C中struct應有的所有特性。例如你可以這樣寫:

struct A //定義一個struct

{

char c1;

int n2;

double db3;

};

A a={'p',7,3.1415926}; //定義時直接賦值

也就是說struct可以在定義的時候用{}賦初值。那麼問題來了,class行不行呢?將上面的struct改成class,試試看。報錯!噢~於是那人跳出來說,他又找到了一個區別。我們仔細看看,這真的又是一個區別嗎?

你試著向上面的struct中加入一個構造函數(或虛函數),你會發現什麼?對,struct也不能用{}賦初值了。的確,以{}的方式來賦初值,只是用一個初始化列表來對數據進行按順序的初始化,如上面如果寫成A a={'p',7};則c1,n2被初始化,而db3沒有。這樣簡單的操作,只能發生在簡單的數據結構上,而不應該放在對象上。加入一個構造函數或是一個虛函數會使struct更體現出一種對象的特性,而使此{}操作不再有效。事實上,是因為加入這樣的函數,使得類的內部結構發生了變化。而加入一個普通的成員函數呢?你會發現{}依舊可用。其實你可以將普通的函數理解成對數據結構的一種演算法,這並不打破它數據結構的特性。

那麼,看到這里,我們發現即使是struct想用{}來賦初值,它也必須滿足很多的約束條件,這些條件實際上就是讓struct更體現出一種數據機構而不是類的特性。那為什麼我們在上面僅僅將struct改成class,{}就不能用了呢?其實問題恰巧是我們之前所講的——訪問控制!你看看,我們忘記了什麼?對,將struct改成class的時候,訪問控制由public變為private了,那當然就不能用{}來賦初值了。加上一個public,你會發現,class也是能用{}的,和struct毫無區別!!!

區別有三:

1: 類可以繼承,結構不可以.

2: 類是引用類型,結構是值類型

3: 類在堆中,結構在棧分配內存

1.值類型與引用類型

結構是值類型:值類型在堆棧上分配地址,所有的基類型都是結構類型,例如:int 對應System.int32 結構,string 對應 system.string 結構 ,通過使用結構可以創建更多的值類型

類是引用類型:引用類型在堆上分配地址

堆棧的執行效率要比堆的執行效率高,可是堆棧的資源有限,不適合處理大的邏輯復雜的對象。所以結構處理作為基類型對待的小對象,而類處理某個商業邏輯

因為結構是值類型所以結構之間的賦值可以創建新的結構,而類是引用類型,類之間的賦值只是復制引用

2.繼承性

結構:不能從另外一個結構或者類繼承,本身也不能被繼承,雖然結構沒有明確的用sealed聲明,可是結構是隱式的sealed .

類:完全可擴展的,除非顯示的聲明sealed 否則類可以繼承其他類和介面,自身也能被繼承

3.內部結構:

結構:

沒有默認的構造函數,但是可以添加構造函數

沒有析構函數

沒有 abstract 和 sealed(因為不能繼承)

不能有protected 修飾符

可以不使用new 初始化

在結構中初始化實例欄位是錯誤的

類:

有默認的構造函數

有析構函數

可以使用 abstract 和 sealed

有protected 修飾符

必須使用new 初始化

⑤ c 公共變數

C++是面向對向的,所以有公有變數,私有變數,公有變數可以被繼承,私有變數則不能被繼承
C是面向過程的,沒有公有之說,是全局變數

⑥ c語言中public:函數使用

c語言中沒有public函數
c++中是有public的函數,可以在外面進行調用的。

⑦ c語言中可以用public和protect嗎

public和protect不是C語言的關鍵字,你可以用他們做標識符使用。public、protect一般用在面向對象語言中,表示類的訪問許可權。C語言不是面向對象的。

⑧ c語言中publicrefersto

c語言中publicrefersto釋義如下:
public:定義一個全局變數。全局變數是編程術語中的一種,源自於變數之分。refersto:是一個指針演算法。
指針可謂C語言的精華所在,就是任何程序數據載入內存後,在內存都有他們的地址。而為了保存一個數據在內存中的地址,我們就需要指針變數。我們只知道:C語言中的數組是指一類類型,數組具體區分為int類型數組,double類型數組,char數組等等。同樣指針這個概念也泛指一類數據類型,int指針類型,double指針類型,char指針類型等等。因此:指針是程序數據在內存中的地址,而指針變數是用來保存這些地址的變數。

熱點內容
安卓藍牙耳機丟了如何找回 發布:2024-04-26 15:36:13 瀏覽:539
win7最近打開文件夾 發布:2024-04-26 15:23:00 瀏覽:554
演算法筆談 發布:2024-04-26 15:14:34 瀏覽:283
技算計編程 發布:2024-04-26 14:43:42 瀏覽:140
開普票密碼區和備注是什麼意思 發布:2024-04-26 14:43:31 瀏覽:852
吃雞安卓和蘋果如何加好友 發布:2024-04-26 14:39:10 瀏覽:836
centos編譯命令 發布:2024-04-26 14:18:04 瀏覽:654
網路編程畢設 發布:2024-04-26 14:13:10 瀏覽:208
秦九韶演算法教案 發布:2024-04-26 13:30:22 瀏覽:412
解壓到當前文件夾右鍵 發布:2024-04-26 03:57:08 瀏覽:979