0 / 0 / 0
Регистрация: 14.06.2013
Сообщений: 19
1

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

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

Author24 — интернет-сервис помощи студентам
Есть базовый класс. Есть наследник базового класса.

В базовом классе есть два виртуальных метода - Get(int id) и Set(int id). В наследнике(-ах) требуется изменить возвращаемый тип этих функций. Как такое можно сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.02.2014, 19:59
Ответы с готовыми решениями:

Требуется изменить тип файла и изменить шрифт в документе
Здравствуйте, вопрос такой: сделал в фокспро 2.5 вывод данных туда-то туда, а необходимо, выводить...

Требуется изменить тип перекрестной ссылки на рисунок
Здравствуйте! Исходные данные: есть документ с одним рисунком, под которым есть номер рисунка, и...

Непонятный возвращаемый тип
Расскажите какой тип должен быть у переменной idRe, чтобы можно было бы присвоить ему значение...

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

5
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
09.02.2014, 20:03 2
почти никак. это уже будут другие функции и они не будут вызываться при попытке их вызвать через указатель на базовый класс.
почти - потому что есть только одна возможность: если эти функции в базовом классе возвращают указатель на класс, то в производном классе можно возвращать указатели на производные классы от этого класса.
2
244 / 245 / 38
Регистрация: 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;
}
1
0 / 0 / 0
Регистрация: 14.06.2013
Сообщений: 19
09.02.2014, 23:10  [ТС] 4
metaluga145, спасибо за пример. Не совсем понял, что означает запись:
C++
1
:d(a)
в объявлении конструктора первого класса, да и во втором тоже не понял. Можете пояснить, пожалуйста?

И еще вопрос. При наследовании, после двоеточия ставится ключевое слово public. Для чего оно ставится? Так нужно(поступать всегда?), в соответствии с правилами? Или это означает, что наследоваться будет только публичная часть базового класса? Или какой-то соблюдаемый стиль?
0
244 / 245 / 38
Регистрация: 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. неплохо написано тут
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
09.02.2014, 23:28 6
Цитата Сообщение от chadushkind Посмотреть сообщение
что означает запись:
Это список инициализации конструктора. Так вызывается конструктор базового класса и инициализируются члены (в том числе константные).
Цитата Сообщение от chadushkind Посмотреть сообщение
после двоеточия ставится ключевое слово public. Для чего оно ставится?
Наследование в C++ может быть разным. public - наследование интерфейса, private/protected - наследование реализации. При public наследовании все поля базового класса наследуются с теми же спецификаторами доступа (private конечно не доступны). При protected - публичные члены базового класса становятся защищенными. При private - публичные и защищенные члены становятся закрытыми.
Если нужно приводить указатель/ссылку дочернего класса к базовому, то наследование должно быть public.
1
09.02.2014, 23:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.02.2014, 23:28
Помогаю со студенческими работами здесь

Инкапсуляция(возвращаемый тип)
Не могу понять, (3-7), какой возвращаемый тип? void или Secundi? class Secundi { ...

Возвращаемый тип по умолчанию
Приветствую всех! В книге Р. Лафоре &quot;Объектно-ориентированное программирование в C++&quot; прочитал...

Функции, возвращаемый тип
Как сделать так, что бы функция возвращала разный тип данных, в зависимости от некой глобальной...

Возвращаемый тип в java
Вопрос такой как создать возвращаемый метод в java я знаю что void это не возвращаемый, а как...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru