Nikhil Lalpawa Ответов: 2

Я не получил предполагаемого результата здесь.


#include<iostream>
using namespace std;
class root{
protected:
    int value;
public:
    void setvalue(int a){
        value=a;
    }
};
class first:public root{
public:
    void print(){
    cout<<"I got the value-"<<value<<endl;
    }

};
class second:public root{
public:
    print(){
    cout<<"I got the value-"<<value<<" too"<<endl;
    }
};
int main(){
    root r;
    r.setvalue(44);
    first f;
    second s;
    f.print();
    s.print();
    return 0;

}


Что я уже пробовал:

Я думаю, что выход должен быть
"Я получил значение 44
Я тоже получил значение 44"

Но вместо этого он дает мне странное число вместо 44.

Richard MacCutchan

Вам нужно позвонить setvalue на других объектах они наследуют только переменную и метод определения от root, а не содержимое объекта r.

2 Ответов

Рейтинг:
0

User 7429338

root r;
r.setvalue(44);
Здесь вы создаете новый объект r типа root и присваиваете ему значение 44.

first f;
second s;
Здесь сначала создается новый объект f типа First, который наследуется от корня класса, но не имеет отношения к объекту r. Он не инициализируется значением. То же самое и для С.

f.print();
s.print();
Здесь отображаются значения f и s, которые не инициализируются.


Рейтинг:
0

KarstenK

Второй вывод-это неинициализированная память от второго объекта.

Напишите хороший конструктор типа

root:root(){value = 0;}//or -1}
root:root(int inValue)

Совет: напишите "чистый код", например имена классов, начинающиеся с большой буквы, и более четкий вывод (имя класса в выводе).