Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2021, 08:17   #1
Artur221
Пользователь
 
Регистрация: 18.03.2021
Сообщений: 26
По умолчанию вызвать с помощью указателей все методы Get

Нужно вызвать с помощью указателей все методы Get из дочерних классов Student и prepodovatel.Но когда я пытаюсь это сделать у меня выводяться нули.Подскажите как это можно осуществить?

Код:
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
 
 
//------------
class rektor {
 
public:
    
      virtual void Set_reg_ekzamena(double rezultat)
    {
        rezultat_ = rezultat;
    }
     double Get_reg_ekzamena() {
 
        return rezultat_;
    }
    virtual void Set_reg_vistyplenia(double vistyplenia)
    {
        vistyplenia_ = vistyplenia;
    }
    double Get_reg_vistyplenia() {
 
        return vistyplenia_;
    }
private:
    double rezultat_;
    double vistyplenia_;
 
};
 
class Student :public rektor {
public:
    void Set_reg_ekzamena(double rezultat1)
    {
        rezultat1_ = rezultat1;
    }
    double Get_reg_ekzamena() {
 
        return rezultat1_;
    }
    void Set_reg_vistyplenia(double vistyplenia1)
    {
        vistyplenia1_ = vistyplenia1;
    }
    double Get_reg_vistyplenia() {
 
        return vistyplenia1_;
    }
    void Set_sr_ball(double sr_ball)
    {
        sr_ball_ = sr_ball;
    }
    double Get_sr_ball() {
 
        return sr_ball_;
    }
    void Set_nomer_bileta(double nomer_bileta)
    {
        nomer_bileta_ = nomer_bileta;
    }
    std::string Get_nomer_bileta() {
 
        return nomer_bileta_;
    }
    void Set_kolvo_ekzamenov(double kolvo_ekzamenov)
    {
        kolvo_ekzamenov_ = kolvo_ekzamenov;
    }
    double Get_kolvo_ekzamenov() {
 
        return kolvo_ekzamenov_;
    }
    void Set_kolvo_prizovix(double kolvo_prizovix)
    {
        kolvo_prizovix_ = kolvo_prizovix;
    }
    double Get_kolvo_prizovix() {
 
        return kolvo_prizovix_;
    }
private:
    std::string nomer_bileta_;
    double rezultat1_;
    double vistyplenia1_;
    double sr_ball_;
    double kolvo_ekzamenov_;
    double kolvo_prizovix_;
};
class prepodovatel :public Student {
public:
    void Set_reg_ekzamena(double rezultat2)
    {
        rezultat2_ = rezultat2;
    }
    double Get_reg_ekzamena() {
 
        return rezultat2_;
    }
    void Set_reg_vistyplenia(double vistyplenia2)
    {
        vistyplenia2_ = vistyplenia2;
    }
    double Get_reg_vistyplenia() {
 
        return vistyplenia2_;
    }
    void Set_sostounie_bileta(std::string sostounie_bileta)
    {
        sostounie_bileta_ = sostounie_bileta;
    }
    std::string Get_sostounie_bileta() {
 
        return sostounie_bileta_;
    }
    void Set_tabelniy_nomer(std::string tabelniy_nomer)
    {
        tabelniy_nomer_ = tabelniy_nomer;
    }
    std::string Get_tabelniy_nomer() {
 
        return tabelniy_nomer_;
    }
    void Set_kolvo_studentov1(double kolvo_studentov1)
    {
        kolvo_studentov1_ = kolvo_studentov1;
    }
    double Get_kolvo_studentov1() {
 
        return kolvo_studentov1_;
    }
    void Set_kolvo_studentov(double kolvo_studentov)
    {
        kolvo_studentov_ = kolvo_studentov;
    }
    double Get_kolvo_studentov() {
 
        return kolvo_studentov_;
    }
    void Set_prizerov(double kolvo_prizerov)
    {
        kolvo_prizerov_ = kolvo_prizerov;
    }
    double Get_prizerov() {
 
        return kolvo_prizerov_;
    }
private:
    std::string sostounie_bileta_;
    std::string tabelniy_nomer_;
    double rezultat2_;
    double vistyplenia2_;
    double kolvo_studentov1_;
    double kolvo_studentov_;
    double kolvo_prizerov_;
};
int main() {
    setlocale(LC_ALL, "rus");
    std::string nomer_bileta;
    double rezultat1,sr_ball, vistyplenia1, kolvo_ekzamenov, kolvo_prizovix;
            std::cin >> rezultat1;
            std::cin >> vistyplenia1;
            std::cin >> sr_ball;
            std::cin >> nomer_bileta;
            std::cin >> kolvo_ekzamenov;
            std::cin >> kolvo_prizovix;
    rektor* a;
    a = new Student();
    cout << a->Get_reg_ekzamena();
    cout << a->Get_reg_vistyplenia();
 
    
    system("pause");
    return(0);
}
Пробовал сначала вызывать сет методы,но все равно нули выводяться

Последний раз редактировалось Artur221; 15.04.2021 в 08:23.
Artur221 вне форума Ответить с цитированием
Старый 15.04.2021, 08:36   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Artur221 Посмотреть сообщение
a = new Student();
cout << a->Get_reg_ekzamena();
Откуда должны появиться данные в a?
waleri вне форума Ответить с цитированием
Старый 15.04.2021, 15:12   #3
Artur221
Пользователь
 
Регистрация: 18.03.2021
Сообщений: 26
По умолчанию

waleri, не совсем понял,что вы имели ввиду, а a->Get_reg_ekzamena()-это указатель
Artur221 вне форума Ответить с цитированием
Старый 15.04.2021, 15:40   #4
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от Artur221 Посмотреть сообщение
это указатель
Это не указатель, а вызов метода

Цитата:
Сообщение от Artur221 Посмотреть сообщение
не совсем понял,что вы имели ввиду
Кто и где заполнил поля класса:
Код:
    std::string nomer_bileta_;
    double rezultat1_;
    double vistyplenia1_;
    double sr_ball_;
    double kolvo_ekzamenov_;
    double kolvo_prizovix_;
Может где-то были вызовы:
Код:
a->Set_reg_ekzamena(...);
a->Set_reg_vistyplenia(...);
Откуда там что-то появиться то должно?
FrosyaZZ вне форума Ответить с цитированием
Старый 15.04.2021, 16:04   #5
Artur221
Пользователь
 
Регистрация: 18.03.2021
Сообщений: 26
По умолчанию

FrosyaZZ, незнаю,я вызываю метод,который возвращает значение переменной,которую я ввожу с клавиатуры,и по идее на экран должно выводиться значение этой переменной а не 0
Artur221 вне форума Ответить с цитированием
Старый 15.04.2021, 16:29   #6
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Нет.
Вводите вы в локальные переменные:
Код:
    std::string nomer_bileta;
    double rezultat1,sr_ball, vistyplenia1, kolvo_ekzamenov, kolvo_prizovix;
            std::cin >> rezultat1;
            std::cin >> vistyplenia1;
            std::cin >> sr_ball;
            std::cin >> nomer_bileta;
            std::cin >> kolvo_ekzamenov;
            std::cin >> kolvo_prizovix;
А метод выводит поле класса:
Код:
    double Get_reg_ekzamena() {
 
        return rezultat1_;
    }

  ...
private:
    std::string nomer_bileta_;
    double rezultat1_;
И так как вы его не заполняете, то 0 вполне может там лежать.

У вас же машина берет топливо из своего бака, а не из хранилища заправки.
FrosyaZZ вне форума Ответить с цитированием
Старый 16.04.2021, 14:32   #7
Artur221
Пользователь
 
Регистрация: 18.03.2021
Сообщений: 26
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Нет.
Вводите вы в локальные переменные:
Код:
    std::string nomer_bileta;
    double rezultat1,sr_ball, vistyplenia1, kolvo_ekzamenov, kolvo_prizovix;
            std::cin >> rezultat1;
            std::cin >> vistyplenia1;
            std::cin >> sr_ball;
            std::cin >> nomer_bileta;
            std::cin >> kolvo_ekzamenov;
            std::cin >> kolvo_prizovix;
А метод выводит поле класса:
Код:
    double Get_reg_ekzamena() {
 
        return rezultat1_;
    }

  ...
private:
    std::string nomer_bileta_;
    double rezultat1_;
И так как вы его не заполняете, то 0 вполне может там лежать.

У вас же машина берет топливо из своего бака, а не из хранилища заправки.
если я ввод данных из локальных переменных перемешу внутрь класса,то у меня все равно ошибки компилятор показывать будет
Artur221 вне форума Ответить с цитированием
Старый 16.04.2021, 14:52   #8
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Если правильно переместите, то нет. Можете оставить так, но только объекту надо их тоже выставить через сеттеры a->Set...
FrosyaZZ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработать строку с помощью указателей(Visual C++)) medieval Помощь студентам 0 17.11.2013 13:23
Вызвать окно Открыть с помощью... Shouldercannon Общие вопросы Delphi 3 27.02.2012 13:18
обращение к элементам массива в С++ с помощью указателей серг Помощь студентам 0 05.12.2009 22:58
Массив указателей (с помощью ООП) diliana Помощь студентам 8 30.11.2009 12:12
массив указателей на методы класса? cout Общие вопросы C/C++ 2 08.05.2008 09:43