C中,類的protected究竟有什麼作用

2021-03-04 04:39:27 字數 6967 閱讀 3398

1樓:匿名使用者

protected專門就是為繼承(子類)設計的 用public繼承,基類所有的訪問標識在子類不變, protected還是protected 。 c++程式設計思想中是這麼說的,public意味著隨後的定義對所有人都適用;private意味著除了該型別的建立者和該型別的內部成員函式之c++中,類的protected究竟有什麼作用?

2樓:

保護關鍵字,作用介於public和private之間,該關鍵字修飾的成員變數或函式外部無法直接使用,只有自己的類成員,以及它的繼承類可以使用

c++中,類的protected究竟有什麼作用?

3樓:可以叫我表哥

protected專門就是為繼承(子類)設計的 用public繼承,基類所有的訪問標識在子類不變, protected還是protected 。

c++程式設計思想中是這麼說的,public意味著隨後的定義對所有人都適用;private意味著除了該型別的建立者和該型別的內部成員函式之外,任何人都無法訪問這些定義;而protected是繼承的類可以訪問protected的成員,但不能訪問private的成員。

4樓:匿名使用者

- 宣告 private protected public

繼承private x x x

protected x o o

public x o o

類外呼叫 x x o

由上圖可見protected和public的區別:

在類外呼叫時,可以呼叫public成員,但是不能呼叫protected成員

也就這乙個區別了。

5樓:趕緊擼毅管

錯了,不管何種繼承,基類的private成員派生類都無法訪問,當然也就出現了protected成員,集合了public成員(對派生類) 和 private成員(對外部訪問)的特點。

6樓:匿名使用者

protected成員

被公有繼承時,在你派生的這個類的內部成員中,能夠訪問。

比如class a

;class b : public a

//你可以在派生類b中訪問到父類a的成員n。

~b(){}

};但是你不能在類的外部訪問到父類的保護成員n。

比如下面的**就是錯誤的:

b x;

x.n = 1;

7樓:匿名使用者

c/c++

關鍵字protected關鍵字(c++和c#)

具有protected訪問控制級別的成員是半公開的,外界無法直接訪問這個控制級別的成員,但是派生類的base指標(在c++中也可用引用訪問)可以獲得訪問能力。protected與private基本相似,只有在繼承時有較大的區別。繼承的類可以訪問protected成員,但是不能訪問private成員。

以下是msdn提供的c# 中protected關鍵字的參考資料。

protected 關鍵字是乙個成員訪問修飾符。受保護成員在它的類中可訪問並且可由派生類訪問。有關 protected 與其他訪問修飾符的比較,請參見可訪問性級別。

僅當訪問通過派生類型別發生時,基類的受保護成員在派生類中才是可訪問的。例如,請看以下**段:

// protected_keyword.csusing system;

class a

class b : a

}語句 a.x =10 將生成錯誤,因為 a 不是從 b 派生的。

結構成員無法受保護,因為無法繼承結構。

示例在此示例中,類 derivedpoint 從 point 派生;因此,可以從該派生類直接訪問基類的受保護成員。

// protected_keyword_2.cs

using system;

class point

class derivedpoint: point

, y = ", dp.x, dp.y); }}

輸出x = 10, y = 15

8樓:匿名使用者

起保護作用,protected只有繼承的類才可以訪問

c++中,類的protected究竟有什麼作用?

9樓:匿名使用者

- 宣告 private protected public

繼承private x x x

protected x o o

public x o o

類外呼叫 x x o

由上圖可見protected和public的區別:

在類外呼叫時,可以呼叫public成員,但是不能呼叫protected成員

也就這乙個區別了。

c++類中的protected什麼時候用

10樓:匿名使用者

protected,主要是介於public和private之間的一種針對繼續關係而來的設計,一般很少用到

1.public繼承:基類public成員,protected成員,private成員的訪問屬性在派生類中分別變成:public, protected, private

2.protected繼承:基類public成員,protected成員,private成員的訪問屬性在派生類中分別變成:protected, protected, private

3.private繼承:基類public成員,protected成員,private成員的訪問屬性在派生類中分別變成:private, private, private

但無論哪種繼承方式,上面兩點都沒有改變:

1.private成員只能被本類成員(類內)和友元訪問,不能被派生類訪問;

2.protected成員可以被派生類(類內)訪問。

11樓:小呆瓜

類成員或者繼承的時候用到

12樓:匿名使用者

說實話,我做開發很多年了,基本很少用到。用的最多的還是public。

c++類的protected與private有何區別

13樓:兄弟連教育

這兩個是訪問類中成員許可權的限制符.在類外如果想使用類中的成員,只能直接使用public型別的,protected和private都是不能訪問的,對於類外使用而言,這兩個是完全相同的.

但是在基類的派生類中,可以直接訪問繼承而來的protected成員,但是不能訪問private限制的成員.所以在派生類中,可以訪問基類繼承而來的public和proected兩種型別的成員.在public公有派生下,繼承而來的成員訪問許可權不變.

protected派生下,public和protected都變成protected,private派生下,所有的繼承下來都是private了.

c++中的類究竟有什麼用?

14樓:投機士

抽象類往往用來表徵對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。通常在程式設計語句中用 abstract 修飾的類是抽象類。在c++中,含有純虛函式的類稱為抽象類,它不能生成物件;在java中,含有抽象方法的類稱為抽象類,同樣不能生成物件。

抽象類是不完整的,它只能用作基類。在物件導向方法中,抽象類主要用來進行型別隱藏和充當全域性變數的角色。只要把這些東西對應到生活中的概念就明白物件導向的設計本身**於生活,我們對事物的理解本身都是一樣的哲學,理解概念之後怎麼寫**就更容易掌握。

抽象類是表示部分地實現功能,比如把某些已經確定的功能實現了,而抽象的功能則表示未實現,因為不能確定子類用什麼方式實現它或者說把可能性和機會留給子類,比如對於寵物這個抽象類"睡覺「這個方法就是抽象的,因為子類的實現方法各有差異,狗經常待在牆邊陰涼處睡覺,而貓則爬到樹上睡覺,我們父類中不能把這個」個性「的東西放入」共性「的父類中,「共性」是它們都會睡覺,但具體怎麼睡覺則是」個性「,因此只能把它弄成抽象的,把機會留給子類來實現它。抽象類和抽象方法的目的是相同的。當子類實現這些抽象方法後就是叫」實現「,如果這個方法在父類中已經實現了不是抽象的而子類再來實現一次就是「覆蓋」或「重寫「了父類的方法,這2個都叫實現了」多型「特性。

「多型」就是某個「共性」在各個子類中表現出不同的「個性」,但都同時保留著「共性」。

pet pets = new pet ;

for(int i = 0;i < pets.length; i++)

15樓:利德

專家指出,物件導向程式設計的優勢只有在大約5萬行**規模的程式裡才能完全體現出來,平時編的小程式使用類只是不斷的讓你培養一種物件導向而不是面向過程的思維方式,並沒有什麼實際意義,你難道沒有發現使用類讓程式變長變大的時候,程式也變得簡單了,各種函式,變數都被有機的組合起來,而且當你需要完成乙個類似功能的程式,你只需要很少的改動,乙個現成的類就能使用了

16樓:匿名使用者

類是絕對重要的,這個問題初學時不要問,就像當初你明明可以用漢語好好交流,為什麼要學英語。只有你要與來外交流時才知道其重要性!

17樓:匿名使用者

工業革命的標誌是:蒸汽機,電等,軟體革命的標誌是類。

18樓:匿名使用者

在物件導向的程式設計中,有經常接觸類、物件等專業名詞;到底什麼是類、什麼是物件呢?在程式又是怎樣運用呢?類是物件導向程式設計的核心,它實際是一種新的資料型別,也是實現抽象型別的工具,因為類是通過抽象資料型別的方法來實現的一種資料型別。

類是對某一類物件的抽象;而物件是某一種類的例項,因此,類和物件是密切相關的。沒有脫離物件的類,也沒有不依賴於類的物件。

什麼是類

類是一種複雜的資料型別,它是將不同型別的資料和與這些資料相關的操作封裝在一起的集合體。這有點像c語言中的結構,唯一不同的就是結構沒有定義所說的「資料相關的操作」,「資料相關的操作」就是我們平常經常看到的「方法」,因此,類具有更高的抽象性,類中的資料具有隱藏性,類還具有封裝性。

類的結構(也即類的組成)是用來確定一類物件的行為的,而這些行為是通過類的內部資料結構和相關的操作來確定的。這些行為是通過一種操作介面來描述的(也即平時我們所看到的類的成員函式),使用者只關心的是介面的功能(也就是我們只關心類的各個成員函式的功能),對它是如何實現的並不感興趣。而操作介面又被稱為這類物件向其他物件所提供的服務。

類的定義格式

類的定義格式一般地分為說明部分和實現部分。說明部分是用來說明該類中的成員,包含資料成員的說明和成員函式的說明。成員函式是用來對資料成員進行操作的,又稱為「方法」。

實現部分是用來對成員函式的定義。概括說來,說明部分將告訴使用者「幹什麼」,而實現部分是告訴使用者「怎麼幹」。

類的一般定義格式如下:

class 《類名》

;《各個成員函式的實現》

下面簡單地對上面的格式進行說明:class是定義類的關鍵字,《類名》是種識別符號,通常用t字母開始的字串作為類名。一對花括號內是類的說明部分(包括前面的類頭)說明該類的成員。

類的成員包含資料成員和成員函式兩部分。從訪問許可權上來分,類的成員又分為:公有的(public)、私有的(private)和保護的(protected)三類。

公有的成員用public來說明,公有部分往往是一些操作(即成員函式),它是提供給使用者的介面功能。這部分成員可以在程式中引用。私有的成員用private來說明,私有部分通常是一些資料成員,這些成員是用來描述該類中的物件的屬性的,使用者是無法訪問它們的,只有成員函式或經特殊說明的函式才可以引用它們,它們是被用來隱藏的部分。

保護類(protected)將在以後介紹。

關鍵字public,private和protected被稱為訪問許可權修飾符或訪問控制修飾符。它們在類體內(即一對花括號內)出現的先後順序無關,並且允許多次出現,用它們來說明類成員的訪問許可權。

其中,《各個成員函式的實現》是類定義中的實現部分,這部分包含所有在類體內說明的函式的定義。如果乙個成員函式的類體內定義了,實現部分將不出現。如果所有的成員函式都在類體內定義,則實現部分可以省略。

下面給出乙個日期類定義的例子:

class tdate

;//類的實現部分

void tdate::setdate(int y, int m, int d)

int tdate::isleapyear()

void tdate::print();

這裡出現的作用域運算子::是用來標識某個成員函式是屬於哪個類的。

該類的定義還可以如下所示:

class tdate

int isleapyear()

void print()

private:

int yeay, month, day;

}這樣對成員函式的實現(即函式的定義)都寫在了類體內,因此類的實現部分被省略了。如果成員函式定義在類體外,則在函式頭的前面要加上該函式所屬類的標識,這時使用作用域運算子::。

定義類時應注意的事項

1、在類體中不允許對所定義的資料成員進行初始化。

2、類中的資料成員的型別可以是任意的,包含整型、浮點型、字元型、陣列、指標和引用等。也可以是物件。另乙個類的物件,可以作該類的成員,但是自身類的物件是不可以的,而自身類的指標或引用又是可以的。

當乙個類的物件用為這個類的成員時,如果另乙個類的的定義在後,需要提前說明。

3、一般地,在類體內先說明公有成員,它們是使用者所關心的,後說明私有成員,它們是使用者不感興趣的。在說明資料成員時,一般按資料成員的型別大小,由小至大說明,這樣可提高時空利用率。

4、經常習慣地將類定義的說明部分或者整個定義部分(包含實現部分)放到乙個標頭檔案中。

C中在類中呼叫其他類的方法,C中在乙個類中呼叫其他類的方法

static void printmenu 方法前少 public 前少public 預設是proctected型別的,只能是其父子類相關的才能呼叫,改成加上public型別 因為str 1 字串是引用型別,比較的並不是他們的內容,而是比較他們的指標,由於str和 1 是分別分配空間的,他們的指標指...

C中,類是什麼,C 中的類外是什麼意思

什麼是類 類是一種複雜的資料型別,它是將不同型別的資料和與這些資料相關的操作封裝在一起的集合體。這有點像c語言中的結構,唯一不同的就是結構沒有定義所說的 資料相關的操作 資料相關的操作 就是我們平常經常看到的 方法 因此,類具有更高的抽象性,類中的資料具有隱藏性,類還具有封裝性。類的結構 也即類的組...

在c中,定義類的變數,宣告類的變數和建立類的變數還有什麼例項化類的變數都是什麼意思

定義 宣告都是說的源 裡的,建立 例項化說的是執行時的。先定義 宣告了,編譯成目標位元組碼,執行時才能建立 例項化成物件,物件你就看成記憶體中實實在在存在的一片區域。c 為什麼不能在乙個類中呼叫另乙個類的變數,而必須是在方法裡例項化後的呼叫 你自己把自己都說進去了,你都說在classb中,是在執行b...