Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

Непонятный возвращаемый тип - C++
Расскажите какой тип должен быть у переменной idRe, чтобы можно было бы присвоить ему значение s.length , если s объект класса string?

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

Возвращаемый тип по умолчанию - C++
Приветствую всех! В книге Р. Лафоре "Объектно-ориентированное программирование в C++" прочитал следующее: Скажите, с чем связан...

Перегруженные функции. Возвращаемый тип - C++
Добро всем времени суток. Изучаю Р.Лаворе книгу и наткнулся на непонятныий мне аспект. Вот есть код: String(char s) { ...

Перегрузка оператора - возвращаемый тип - C++
class A { private: int x; public: A& operator += (int y); }; A& A::operator += (int y) { x = y; ...

Возвращаемый тип шаблона через std::common_type - C++
Вот отрывок моего кода. Не могу понять как определить возвращаемый тип объекта matrix. template<typename V, typename U, size_t R, size_t...

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

И еще вопрос. При наследовании, после двоеточия ставится ключевое слово public. Для чего оно ставится? Так нужно(поступать всегда?), в соответствии с правилами? Или это означает, что наследоваться будет только публичная часть базового класса? Или какой-то соблюдаемый стиль?
0
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. неплохо написано тут
1
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
09.02.2014, 23:28 #6
Цитата Сообщение от chadushkind Посмотреть сообщение
что означает запись:
Это список инициализации конструктора. Так вызывается конструктор базового класса и инициализируются члены (в том числе константные).
Цитата Сообщение от chadushkind Посмотреть сообщение
после двоеточия ставится ключевое слово public. Для чего оно ставится?
Наследование в C++ может быть разным. public - наследование интерфейса, private/protected - наследование реализации. При public наследовании все поля базового класса наследуются с теми же спецификаторами доступа (private конечно не доступны). При protected - публичные члены базового класса становятся защищенными. При private - публичные и защищенные члены становятся закрытыми.
Если нужно приводить указатель/ссылку дочернего класса к базовому, то наследование должно быть public.
1
09.02.2014, 23:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2014, 23:28
Привет! Вот еще темы с ответами:

Возвращаемый тип конструктора копирования в абстрактном классе - C++
Здравствуйте! Есть абстрактный класс (с &quot;чистыми&quot; виртуальными функциями), и в нем необходимо явно определить конструктор копирования....

что за возвращаемый тип, и как работает функция? - C++
pair&lt;string, string&gt; splitExpression(string expr) { stringstream ss; ss &lt;&lt; expr; pair&lt;string, string&gt; result; getline(ss,...

Для чего нужен возвращаемый тип в перегрузке ввода >> и почему без него него выдаётся ошибка? - C++
Для чего нужен возвращаемый тип в перегрузке ввода &gt;&gt;, какую роль он выполняет что без него него выдаётся ошибка. cin объект istream...

возвращаемый тип "main" должен быть "int", а не - C++
код: // формирование списка фамилия, имя struct FIO { char *familiya; char *imya; } void main() {


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.