2015-10-22 6 views
0

Я пытаюсь получить функцию-член класса A, значение valuea которой имеет значение valueb класса B. У меня нет полного понимания наследства, поэтому простите меня, если это простая или глупая ошибка. Также было бы проще сделать функцию преобразования другом обоих классов?Значение наследования класса класса 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

В чем проблема? – OMGtechy

+1

'class A' не может получить доступ к' valueb' из параметра, так как он защищен. Но 'A' уже есть' B', поэтому 'valuea = B :: valueb;' работает. Я не знаю, если это соответствует вашему намерению. См. Рабочий пример: http://ideone.com/NiQQAF –

ответ

0

Ваш вопрос будет легче ответить, если бы вы заявили проблему, которую вы пытаетесь решить с помощью этой конструкции, но я буду бросать в несколько центов.

Я пытаюсь иметь функцию-член класса A, значение valuea которой всегда имеет значение valueb класса B.

Это не имеет большого смысла как наследуется из B. An A является B. Это имело бы больше смысла, если А имел B, как часть, т.е.

class A{ 
    B partOfA; 

Ваш название новообращенный предполагает, что вы можете захотеть преобразовать объект типа B к объекту типа а, это тоже довольно странно, но вы можете сделать это, имея конструктор

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

Таким образом, вместо того, чтобы делать «преобразование» вы создаете новый объект

B b; 
A a(b); 

Если ваша единственная цель состоит в том, чтобы получить доступ к x.valueb от B вам нужен член общественного сбруя в B. См, например Accessing protected members in a derived class

+0

Эй, спасибо, Это был простой лабораторный вопрос для класса, который я принимаю. Я просто подумал, что пытается использовать материал, который мы собираемся. Я даже не думал просто добавить функцию доступа, но это, очевидно, путь. извините за путаницу. – Tony606