Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
chadushkind
0 / 0 / 0
Регистрация: 14.06.2013
Сообщений: 19
#1

В наследнике(-ах) требуется изменить возвращаемый тип этих функций. - C++

09.02.2014, 19:59. Просмотров 315. Ответов 5
Метки нет (Все метки)

Есть базовый класс. Есть наследник базового класса.

В базовом классе есть два виртуальных метода - Get(int id) и Set(int id). В наследнике(-ах) требуется изменить возвращаемый тип этих функций. Как такое можно сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2014, 19:59     В наследнике(-ах) требуется изменить возвращаемый тип этих функций.
Посмотрите здесь:

возвращаемый тип "main" должен быть "int", а не C++
Перегрузка оператора - возвращаемый тип C++
C++ Функции, возвращаемый тип
C++ Возвращаемый тип шаблона через std::common_type
C++ Перегруженные функции. Возвращаемый тип
C++ Возвращаемый тип конструктора копирования в абстрактном классе
Как можно объяснить выполнение этих функций? C++
Для чего нужен возвращаемый тип в перегрузке ввода >> и почему без него него выдаётся ошибка? C++
что за возвращаемый тип, и как работает функция? C++
C++ Возвращаемый тип по умолчанию
Непонятный возвращаемый тип C++
C++ Какое отличие в работе двух этих функций?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
09.02.2014, 20:03     В наследнике(-ах) требуется изменить возвращаемый тип этих функций. #2
почти никак. это уже будут другие функции и они не будут вызываться при попытке их вызвать через указатель на базовый класс.
почти - потому что есть только одна возможность: если эти функции в базовом классе возвращают указатель на класс, то в производном классе можно возвращать указатели на производные классы от этого класса.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.02.2014, 20:17     В наследнике(-ах) требуется изменить возвращаемый тип этих функций. #3
chadushkind, можно еще раз перегрузить эти функции. сделать что-то такое(не уверен, что это то, что Вы хотели)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
class first
{
public:
    first (int a):d(a){};
    ~first(){};
    void set(int a)
    {
        cout << "first set is called" << endl;
        d = a;
    }
    void get()
    {
        cout << d << endl;
    }
private:
    int d;
};
 
class second: public first
{
public:
    second(int a):first(a){};
    ~second(){};
    int set(int a)
    {
        cout << "second set is called" << endl;
        first::set(a);
        return 0;
    }
};
 
int main()
{
    second a(35);
    a.get();
    a.set(25);
    a.get();
    system("pause");
    return 0;
}
chadushkind
0 / 0 / 0
Регистрация: 14.06.2013
Сообщений: 19
09.02.2014, 23:10  [ТС]     В наследнике(-ах) требуется изменить возвращаемый тип этих функций. #4
metaluga145, спасибо за пример. Не совсем понял, что означает запись:
C++
1
:d(a)
в объявлении конструктора первого класса, да и во втором тоже не понял. Можете пояснить, пожалуйста?

И еще вопрос. При наследовании, после двоеточия ставится ключевое слово public. Для чего оно ставится? Так нужно(поступать всегда?), в соответствии с правилами? Или это означает, что наследоваться будет только публичная часть базового класса? Или какой-то соблюдаемый стиль?
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.02.2014, 23:28     В наследнике(-ах) требуется изменить возвращаемый тип этих функций. #5
Цитата Сообщение от chadushkind Посмотреть сообщение
Не совсем понял, что означает запись:
это то же самое, что
C++
1
first (int a):{d = a;};
То, что я написал выше, -это инициализация, то есть, можно сначала создать переменную, а потом ей присвоить, а можно выделить память и сразу туда положить что-то - это и будет инициализация при выделении памяти под переменную. так просто быстрее работает.
Цитата Сообщение от chadushkind Посмотреть сообщение
да и во втором тоже не понял
переменная d на самом деле принадлежит классу first, но ее надо как-то инициализивароть, для этого мы вызываем конструктор класса first. То есть, при вызове конструктора класса second, будет вызван конструктор класса first. Это обязательная часть. Об этом подробнее можете почитать в литературе.
Цитата Сообщение от chadushkind Посмотреть сообщение
ключевое слово public
да, будет унаследована часть public. неплохо написано тут
Tulosba
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.02.2014, 23:28     В наследнике(-ах) требуется изменить возвращаемый тип этих функций. #6
Цитата Сообщение от chadushkind Посмотреть сообщение
что означает запись:
Это список инициализации конструктора. Так вызывается конструктор базового класса и инициализируются члены (в том числе константные).
Цитата Сообщение от chadushkind Посмотреть сообщение
после двоеточия ставится ключевое слово public. Для чего оно ставится?
Наследование в C++ может быть разным. public - наследование интерфейса, private/protected - наследование реализации. При public наследовании все поля базового класса наследуются с теми же спецификаторами доступа (private конечно не доступны). При protected - публичные члены базового класса становятся защищенными. При private - публичные и защищенные члены становятся закрытыми.
Если нужно приводить указатель/ссылку дочернего класса к базовому, то наследование должно быть public.
Yandex
Объявления
09.02.2014, 23:28     В наследнике(-ах) требуется изменить возвращаемый тип этих функций.
Ответ Создать тему
Опции темы

Текущее время: 06:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru