2015-10-22 26 views
0

我試圖讓classA設置valuea的成員函數,以便classB的值是什麼。如果這是一個簡單或愚蠢的錯誤,我並不完全瞭解繼承,所以請原諒我。同樣,將轉換功能變爲兩個類的朋友會更容易嗎?C++類繼承設置「classA」數據成員等於「ClassB」

class B 
{ 
    protected: 
    int valueb; 

public: 
     B() { } 
     B(int x) {valueb=x;} 
}; 

class A: public B 
{ 
    int valuea; 
public: 
    A():B() {} 
    A(int x):B(x) {valuea=x;} 
    void convert(B x) 
    { 
     valuea = x.valueb; 
    } 
    int getValue() {return valuea;} 

}; 


int main() 
{ 
    A a(1); 
    B b(2); 

    a.convert(b); 

    cout << a.getValue() << endl; 
} 
+0

什麼問題訪問x.valueb? – OMGtechy

+1

由於受到保護,因此'class A'不能從參數中訪問'valueb'。但是'A'已經是'B',所以'valuea = B :: valueb;'有效。我不知道如果這符合你的意圖。看到一個工作示例:http://ideone.com/NiQQAF –

回答

0

你的問題會比較容易回答,如果你曾表示你正在嘗試這樣的設計來解決這個問題,但我會在幾毛錢扔。

我試圖讓類B的值爲b的類A的set valuea的成員函數是。

這沒有多大意義,因爲A從B中的一個繼承是一個 B.這將更有意義,如果A的B中的一部分,即

class A{ 
    B partOfA; 

你名稱轉換暗示你可能要到B類型的對象轉換爲A類的對象,這也是很奇怪,但你可以通過具有構造

A(const B& b):B(b){} 

因此,而不是做一個「轉換」做你創建一個新的對象

B b; 
A a(b); 

如果你唯一的目標是從B您需要B.公共訪問成員例如見Accessing protected members in a derived class

+0

嘿,謝謝,這只是我正在上課的一個簡單的實驗室問題。我只是在想它試圖使用我們正在經歷的東西。我甚至沒有想過只是增加一個訪問函數,但這顯然是一種方法。對困惑感到抱歉。 – Tony606

相關問題