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 或輸入多少,電壓源兩端電壓不變。二。電流源內阻為無窮大,不論兩端...