2012-12-21 55 views
0

在函數內部我有一個class A這是在一個單獨的文件(sayfile1.cpp如何覆蓋在一個類中定義在另一個類,這是在C++

class A{ 
public: 
     virtual int add(){ 
     int a=5; 
     int b=4; 
     int c = a+b; 
     return c; 
     } 
}; 

現在,在一個不同的文件的虛擬方法(比如file2.cpp),我有一個函數(我在這個函數中有很多其他的東西),其中我想創建一個繼承自class A的類並實現在class A中聲明的虛擬方法。

void function(Mat param1, Mat param2) 
{ 
    //Some process here.. 
    .. 
    .. 
    int c=100; 
    class B:public A{ 
    public: 
     virtual int add(){ 

     return c; 
     } 
    }; 

} 

現在,如果我是要調用的函數int add(),我想的c的結果是100,而不是9

是否有可能做這樣的事情在C++?

在此先感謝

回答

1

定義成員變量:

class B: public A { 
    int c_; 
public: 
    explicit B(int c):c_(c){}; 
    virtual int add() { 
     return c_; 
    } 
} 
B variable((100)); 
+0

wat是你用的'變量'嗎?我打算執行相同的邏輯返回類型的IplImage *爲Opencv,我面臨着這個'變化'的問題 我是新來的C + +。所以請忍受我。 – viggie

+0

當我使用IplImage *而不是int這個邏輯時,我得到這個錯誤 - 「抽象類類型」B「的對象是不允許的」。 任何建議,以克服這個錯誤? – viggie

0

你需要分割你的file1.cppfile1.h

#ifndef FILE1_H 
class A { 
public: 
    virtual int add(); 
}; 
#endif 

file1.cpp與它的實現:

int A::add { /*your code * } 

在其他文件中,您只包括頭文件:

#include "file1.h" 

下面是不是在C法律++:

void function(Mat param1, Mat param2) 
{ 
    //Some process here.. 
    .. 
    .. 
    int c=100; 
    class B:public A { 
    public: 
    virtual int add(){ 

    return c; 
    } 
}; 

}

相反,你需要像這樣:

class B : public A { 
public: 
    B(int v) : c(v) {} 
    virtual int add(){ return c; } 
private: 
    int c; 
}; 

void function(Mat param1, Mat param2) 
{ 
    //Some process here.. 
    .. 
    .. 
    int c=100; 
    B o(c); 

}

+0

感謝您的快速回復。我不明白這裏的一切,但是當我試圖調試,代碼 B○(C) 到 B級去:公開發行A { 市民: - > B(INT V):C(V ){} virtual int add(){return c; } private: int c; }; 然後它打破了循環。我希望將c的值傳遞給在下一步 – viggie

+0

中定義的虛擬int add()函數,我很抱歉。這個我是這個社區的新手,我不知道如何以有組織的方式輸入這些評論! (c) – viggie

相關問題