簡體   English   中英

C中的對象-結構語法相關

[英]Objects in C - Structs Syntax Related

我最近在閱讀有關創建類似於c ++對象的方法的信息,但是在C語言中,我遇到了一些非常好的示例。 但是,這是我想了好幾個小時的代碼,因為這是我第一次看到這種語法,而且我在Google上找不到類似的東西...


塊本身就是這個:

struct stack {
     struct stack_type * my_type;
     // Put the stuff that you put after private: here
};
struct stack_type {
     void (* construct)(struct stack * this); // This takes uninitialized memory
     struct stack * (* operator_new)(); // This allocates a new struct, passes it to construct, and then returns it
     void (*push)(struct stack * this, thing * t); // Pushing t onto this stack
     thing * (*pop)(struct stack * this); // Pops the top thing off the stack and returns it
     int this_is_here_as_an_example_only;
}Stack = {
    .construct = stack_construct,
    .operator_new = stack_operator_new,
    .push = stack_push,
    .pop = stack_pop
};

假設所有設置為指針的函數都在其他位置定義,我的疑慮如下:

1)為什么在初始化函數指針時,點( '。' )是什么意思? (例如: .construct = stack_construct

2)為什么在結構定義末尾的“堆棧”后面有一個等號,以及為什么除了“;”之外還有其他東西 (在本例中為“ Stack”一詞),考慮到一開始就沒有typedef 我認為它與初始化有關(我不知道像構造函數一樣),但這是我第一次在定義中看到struct = {...,...,...}。 我已經看到,當您初始化以下示例中的結構時:

typedef struct s{
int a;
char b;
}struc;

void main(){
    struc my_struct={12,'z'};
}

但這不在結構的主聲明中,並且在{}中仍然沒有'=' ,這與第一個示例不同,在第一個示例中它顯示類似...

struc my_struct={ a = 12,
                  b = 'z'};

3)這是一個小疑問,這意味着,我對前兩個更感興趣。 無論如何,它就開始了……在第一個代碼的開頭,它說了類似“ //將您放置在private之后的內容:這里”。 這是為什么? 如何將它們設為私有?


僅此而已,我將不勝感激,這讓我想了好幾個小時! 在此先感謝您,祝您度過愉快的一天!

1)不用擔心成員是函數,僅此而已:

點(。)在結構初始化程序中是什么意思?

2)在

struct S {int i;}
s = {0};

第一行命名一個可用於聲明和初始化變量的類型。

真的等同於

double d = 1;

在其中,將double替換為struct S {int i;},將s替換為d,並將1初始化為結構體{0}的初始化程序。 現在,將其與點語法結合起來。

它也具有定義結構S的副作用。

更新:關於3),我不認為私有是指訪問控制的實現,而是指這樣的事實,即在C ++中,您通常會在類的私有部分中列出數據成員,因此我理解這作為在類型標識元素之后添加數據成員的說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM