簡體   English   中英

面向對象的C編程-等同於“ this”關鍵字?

[英]Object oriented C programming - equivalent of 'this' keyword?

基於答案,我正在C中進行OOP實驗。 我遇到了無法完全解決的問題。 舉個例子:

struct foo {
    int val;
    int (*bar)(struct foo, int);
}

int foo_bar(struct foo mod, int val)
{
    mod.val = val;
}

int main(void)
{
    struct foo foo;
    foo.bar = foo_bar;
    foo.bar(foo, 8);
}

我認為,如果有一種方法可以在C中使用this關鍵字,它將更加簡單明了:

struct foo {
    int val;
    int (*bar)(struct foo, int);
}

int foo_bar(int val)
{
    this.val = val;
}

int main(void)
{
    struct foo foo;
    foo.bar = foo_bar;
    foo.bar(8);
}

聽起來是不可能的,但是可能有一些解決方法,有點像C本身的OOP。 有什么方法可以在面向對象的C語言中實現this關鍵字的功能嗎?

不可以。C++中的this關鍵字是對當前對象的引用,實際上是在ABI級別上顯式傳遞給成員函數的。 在函數中顯式傳遞指向對象的指針(作為第一個參數)是C語言中的最佳等效項。請注意,這意味着

struct foo {
    int   value;
    int (*func)(struct foo *, int);
};

void foo_bar(struct foo *f, int value)
{
    f->value = value;
}

即, 指向對象的指針作為第一個參數而不是結構本身被傳遞。 這使對象明確通過引用傳遞,並使理解和維護此類代碼更加容易。


期望在一種編程語言中看到的功能在其他某種編程語言中仍然有效,即使這兩者之間存在某種聯系也是理智的。

您會看到,每種編程語言都有自己的解決問題的方法,自己的范例 因為沒有通用的最佳范例 ,所以使用具有最適用/最有效/最有用范例的編程語言可以最好地解決問題。 例如,您不必編寫C ++程序來加快常見的命令行任務; 您可以使用Shell腳本或其他簡單的腳本語言來代替。

作為程序員,能夠從一種編程語言范例切換到另一種編程語言范例,意味着您能夠從不同的角度看待問題。 從當前的軟件項目來看,最強大,最重要和最有效的軟件是由具有這種能力的程序員編寫的。

這就是為什么我在上面說過,期望一種編程語言的功能或范例可以移植到其他語言並不明智。 您不應該這樣做,因為這等效於擁有一個工具,並且將所有問題視為您手中的工具是解決問題的唯一可能工具。 (如果您只有錘子,所有問題都會像釘子一樣開始。)學習(尤其是學會接受)不同編程語言中的不同范例,將成為一個更好的程序員,一個更好的問題解決者。

暫無
暫無

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

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