2015-10-30 44 views
-3

我不確定這是否已經在某個地方得到了回答,或者我所問的是否可行。我對C++和OOP一般都不太熟悉,所以如果我提出的問題太明顯,請原諒我,因爲我的思想現在有點卡住了。 無論如何,我想處理的是:實例化對象時的C++純虛函數實現

我正在使用一個框架來處理應用程序的一些回調。 API有這些事件的類和回調函數作爲純虛函數。例如:

class A { 
public: 
    A(){}; 
    ~A(){}; 
    virtual void myCallback(){} = 0 
}; 

在我的代碼,我實現這個回調,我有這樣的:在我的主要

class B : A { 
public: 
    B(){ 
     std::cout<<"I'm a ClassB object"; 
    }; 
    ~B(){}; 
    void myCallback(){ 
     std::cout<<"Hello callback"; 
    }; 
}; 

現在假設我有類似的東西:

int main(){ 
    int x=1; 
    B objB; 
    //Do some stuff for a while 
    return 1; 
} 

我可以在實例化B對象時看到「我是ClassB對象」消息,並且可以在觸發事件「Hello回調」消息時看到。 所以我在這裏問的是我如何能夠在我的回調裏面獲得來自main的「x」的值?我可以在主內部重新實現回調嗎?你認爲我的方法是正確的嗎? 我想要的是通過擁有一個類B的對象在我的主內部實現純虛擬回調函數。或者甚至以某種方式在myCallback函數中獲取x的值。 我不確定我是否足夠清楚或者如果我搞砸了任何東西

+1

FYI:'A(){};','〜A(){};''和'〜B() {};'都有多餘的分號。此外,'virtual void myCallback(){} = 0'顯然有一些不好的語法。 –

+1

而'〜A(){}'應該是'虛擬的'。 – NathanOliver

回答

0

如果我明白這個問題,你想要什麼通常被稱爲關閉。你想要myCallback知道主內部x的值。有幾種方法可以做到這一點,最簡單的看起來像下面這樣:

class B : public A { 
public: 
    B(int x) x(x) { 
     std::cout<<"I'm a ClassB object"; 
    } 

    ~B() = default; 

    void myCallback() { 
     std::cout << "Hello callback, x is " << x << "\n"; 
    } 
private: 
    int x; 
}; 

int main() { 
    int x = 1; 
    B objB(x); 
    //Do some stuff for a while 
    return 0; 
} 
+0

謝謝你的回覆。事實上,我可能需要這樣的東西。 – catamaran33