類定義中巢狀結構為什麼不可以

2022-02-06 23:45:08 字數 3701 閱讀 6271

1樓:匿名使用者

類定義中巢狀結構體是可以的,這裡要分幾種情況說明:

對於已經宣告的(在類外)結構體型別,在類定義內巢狀結構體變數,沒有任何問題。

在類定義內直接定義結構體型別並同時宣告結構體變數,也是可以的,但這個結構體型別無法在類外使用。

在類內只定義結構體型別,而不同時宣告結構體變數是不可以的(這個在結構體定義內同樣如此)。

大多數情況下,我們建議將結構體型別的定義放在類的外面,這樣定義的結構體可以在更多的地方(類外)使用,而不會發生使用邏輯歧義和編譯錯誤。

其實類就是在c++中,對c語言結構體的擴充套件,在c++中可以將結構體看做是一個最簡單的類。而「類巢狀」則是c++物件導向涉及的一個應用技巧,用於介面封裝(隱藏)和成員共享,但這和巢狀結構體沒有太大的關係,有興趣可以專門看看相關的書籍。

另外,結構體的定義,有兩種形式,其中一種帶有typedef關鍵字,另一種不帶。這兩種定義是由差別的,簡單的說,typedef是宣告瞭一種「變數型別」,不帶typedef是直接宣告結構體變數,具體應用的差別參考結構體宣告的相關書籍章節。

2樓:幸巴達

類中可以巢狀結構,呼叫的時候前面要加類名。

3樓:何小東

在一個類的內部定義另一個類或結構體,我們稱之為巢狀類(nested class),或者巢狀型別。之所以引入這樣一個巢狀類,往往是因為外圍類需要使用巢狀類物件作為底層實現,並且該巢狀類只用於外圍類的實現,且同時可以對使用者隱藏該底層實現。

雖然巢狀類在外圍類內部定義,但它是一個獨立的類,基本上與外圍類不相關。它的成員不屬於外圍類,同樣,外圍類的成員也不屬於該巢狀類。巢狀類的出現只是告訴外圍類有一個這樣的型別成員供外圍類使用。

並且,外圍類對巢狀類成員的訪問沒有任何特權,巢狀類對外圍類成員的訪問也同樣如此,它們都遵循普通類所具有的標號訪問控制。

前面說過,之所以使用巢狀類的另一個原因是達到底層實現隱藏的目的。為了實現這種目的,我們需要在另一個標頭檔案中定義該巢狀類,而只在外圍類中前向宣告這個巢狀類即可。當然,在外圍類外面定義這個巢狀類時,應該使用外圍類進行限定。

使用時,只需要在外圍類的實現檔案中包含這個標頭檔案即可。

另外,巢狀類可以直接引用外圍類的靜態成員、型別名和列舉成員,即使這些是private的。

例項如下:

#ifndef nestclass_h_

#define nestclass_h_

class a

;#endif

#include "nestclass.h"

#include

using namespace std;

class a::b

~b(){}

void operate()

#include "nestclass.h"

void main()

在巢狀類的定義被看到之前我們只能宣告巢狀類的指標和引用,如上面在a中定義為b m_b而不是b* m_b將會引發一個編譯錯誤。關於c++巢狀類的詳細用法請參考《c++ primer 第三版》p551

結構體可以巢狀定義嗎

4樓:文件類共創空間

類定義中巢狀結構體是可以的,這裡要分幾種情況說明:

對於已經宣告的(在類外)結構體型別,在類定義內巢狀結構體變數,沒有任何問題。

在類定義內直接定義結構體型別並同時宣告結構體變數,也是可以的,但這個結構體型別無法在類外使用。

在類內只定義結構體型別,而不同時宣告結構體變數是不可以的(這個在結構體定義內同樣如此)。

大多數情況下,我們建議將結構體型別的定義放在類的外面,這樣定義的結構體可以在更多的地方(類外)使用,而不會發生使用邏輯歧義和編譯錯誤。

其實類就是在c++中,對c語言結構體的擴充套件,在c++中可以將結構體看做是一個最簡單的類。而「類巢狀」則是c++物件導向涉及的一個應用技巧,用於介面封裝(隱藏)和成員共享,但這和巢狀結構體沒有太大的關係,有興趣可以專門看看相關的書籍。

另外,結構體的定義,有兩種形式,其中一種帶有typedef關鍵字,另一種不帶。這兩種定義是由差別的,簡單的說,typedef是宣告瞭一種「變數型別」,不帶typedef是直接宣告結構體變數,具體應用的差別參考結構體宣告的相關書籍章節。

5樓:匿名使用者

完全可以這樣定義 ,本人試過

6樓:匿名使用者

你可以定義在外邊啊,這樣多亂啊。

struct stu2

defen;

struct stu;

c資料結構 結構體可以巢狀使用嗎?

7樓:有錢買不起房子

typedef 只是給型別起個別名,上面兩個定義完全可以。因為struct lnode和lnode都代表結構

在c中,即使同名,但結構struct和型別名還是可區分的,因此定義不出錯。

8樓:匿名使用者

人家都說是c了,c裡哪有class

可以巢狀的,完全沒問題,資料結構也是一種資料型別.結構體就是多個資料型別的集合,有何不可

9樓:笑傲若雲

不太理解為何要這樣做,這種寫法看起來不太好看。如果需要巢狀的話,建議你在class裡面去巢狀struct,這樣會比較好,也完全能解決你的問題。

c語言 如何在結構體中給巢狀的結構體賦值?

10樓:自我程式設計

結構體巢狀,賦初值,大括號巢狀就可以了。

問題是你**寫錯了。

你定義的old1不是結構型別,而是結構變數。

在shuju中成員要寫struct old 變數名;

不能寫struct old1。

下面是演示**:(補充:如果想定義一個結構型別別名,要用typedef

#include

struct old

int year;

int month;

int day;

}old1=;

struct shuju

char name[10];

char gender[6];

int height;

struct old old1;

char access[9];

}shuju1=,"well"};

int main()

printf("結構變數old1的初值:            %d %d %d\n",old1.year,old1.month,old1.day);

printf("結構變數shuju1中成員old1的初值:%d %d %d\n",shuju1.old1.

year,shuju1.old1.month,shuju1.

old1.day);

printf("我特意起一樣的名字,就是告訴你這兩個變數是不一樣的。\n");

return 0;

/*(補充:如果想定義一個結構型別別名,要用

typedef struct old

int year;

int month;

int day;

}old1;//這樣old1才表示是一個型別,然後再定義該型別變數時,才可以寫 old1 變數名;)*/

11樓:哼呀弟

, "well"};

12樓:匿名使用者

加個大括號試試 }

c語言中「函式的定義不可以巢狀,但函式的呼叫可以巢狀」是什麼意思最好能舉例子說明!謝謝

函式的定bai義不可以巢狀du 定義函zhi數a void a 定義a函式dao 這是不對的,但函式的呼叫 專可以嵌屬套 在主函式中呼叫x函式,x函式在呼叫y函式 void y 定義y函式 void x 定義x函式 void main 首先你要明白函式的 定義 和 呼叫 各是什麼意思。函式的呼叫可以...

什麼是感光類食物?為什麼長斑不可以吃感光類食物

1感光食物富含銅等金屬元素,可直接或間接地增加與黑色素生成有關的物質的數量與活性 2這類食物吃多了,會令肌膚更容易受到紫外線侵害而變黑或長斑。3常見的感光食物有 檸檬 胡蘿蔔 木瓜 芹菜 萵苣 土豆 香菜 莧菜 油菜 橘子 紫菜 田螺 菠菜 無花果,九層塔 韭菜 紅豆。4一般想 變得白皙,應少吃感光...

為什麼電壓源不可以並聯,電流源不可以串聯

因為與理想電源的定義不符,屬於邏輯錯誤。3v與5v 並聯,哪個決定電壓?實際電源可以,3v電源的內阻會承擔多餘的電壓,3v vout 5 v。電壓源 電流源是定義出來的理想電源,具有如下性質 一。電壓源內阻為零,不論電流輸出 imax 或輸入多少,電壓源兩端電壓不變。二。電流源內阻為無窮大,不論兩端...