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

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

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

ООП доопределить класс при наследовании - C++

05.10.2016, 18:51. Просмотров 212. Ответов 12
Метки нет (Все метки)

Привет всем, задался таким вопросом.
Есть класс животные, в нем есть атрибуты и метод для распечатки этих атрибутов.
Далее наследую класс млекопитающие, соответственно будут добавлены кое какие атрибуты.
Существует ли возможность доопределить класс распечатки, чтобы заново не определять уже печатающиеся атрибуты класса животные ?

Или делать по человечески get & set для каждого атрибута ? Но хотелось бы разобраться с вопросом доопределения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2016, 18:51
Я подобрал для вас темы с готовыми решениями и ответами на вопрос ООП доопределить класс при наследовании (C++):

Как дополнить вложенный класс при наследовании внешнего? - C++
Допустим, есть класс B, лежащий в классе A. Каким образом класс D, лежащий в C (C наследует A), может наследовать класс B и изменить его?

Создать базовый класс Car (машина) и производный класс Lorry (грузовик): ООП ошибки - C++
Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом цилиндров, мощностью. Определить методы переназначения...

Использование шаблонов при наследовании, ошибка при компиляции - C++
При изучении списков написал шаблон протестировал, все работает. После написал класс наследник от шаблона List.h, компилятор выдает...

Присвоение при наследовании - C++
Всем доброго дня ! Подскажите пожалуйста как сделать так , что-бы при выполнении операции a = c; вызывались операторы = обеих ...

Конструкторы при наследовании - C++
Добрый вечер. Пишу программу с наследованием классов. Класс-родитель - nasled, производный от него - steck. Когда пытаюсь вызвать...

Ошибка при наследовании - C++
Здраствуйте,не могу понять где именно оштбся,возможно кто-то поможет,код прилагаю //#include "stdafx.h" #include <iostream> ...

12
Max Dark
шКодер самоучка
1866 / 1666 / 605
Регистрация: 09.10.2013
Сообщений: 3,707
Записей в блоге: 6
Завершенные тесты: 2
05.10.2016, 19:02 #2
Цитата Сообщение от Leffken Посмотреть сообщение
Существует ли возможность доопределить класс распечатки, чтобы заново не определять уже печатающиеся атрибуты класса животные ?
есть возможность вызвать метод родительского класса
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
class A {
public:
    virtual void print() {
        std::cout << "A::print()" << std::endl;
    }
};
 
class B:public A {
public:
    virtual void print() override {
        std::cout << "B::print()" << std::endl;
        A::print();
        std::cout << "B::print()" << std::endl;
    }
};
 
int main() {
    B b;
    b.print();
    return 0;
}
http://ideone.com/umkDNK
0
Leffken
0 / 0 / 0
Регистрация: 24.06.2012
Сообщений: 112
05.10.2016, 19:09  [ТС] #3
Цитата Сообщение от Max Dark Посмотреть сообщение
есть возможность вызвать метод родительского класса
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
class A {
public:
    virtual void print() {
        std::cout << "A::print()" << std::endl;
    }
};
 
class B:public A {
public:
    virtual void print() override {
        std::cout << "B::print()" << std::endl;
        A::print();
        std::cout << "B::print()" << std::endl;
    }
};
 
int main() {
    B b;
    b.print();
    return 0;
}
http://ideone.com/umkDNK
Только подумал про вызов родительского метода, загуглил и решил посмотреть что мне на форуме ответили ... стоит только не много подумать мозжечком ))))
Спасибо, то что нужно !
0
rikimaru2013
C++ Game Dev
2471 / 1140 / 241
Регистрация: 30.11.2013
Сообщений: 3,709
05.10.2016, 19:13 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Leffken Посмотреть сообщение
стоит только не много подумать мозжечком ))))
Цитата Сообщение от Leffken Посмотреть сообщение
если я использую просто void (не virtual void) мне нужен override ?
Нам подождать пока вы мозг включите или можно отвечать?)
1
Leffken
0 / 0 / 0
Регистрация: 24.06.2012
Сообщений: 112
05.10.2016, 19:15  [ТС] #5
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Нам подождать пока вы мозг включите или можно отвечать?)
Уже почти подумал )))
Спасибо.
0
rikimaru2013
C++ Game Dev
2471 / 1140 / 241
Регистрация: 30.11.2013
Сообщений: 3,709
05.10.2016, 19:19 #6
Leffken,
Кликните здесь для просмотра всего текста
Там еще можно пробовать у себя в студии ваши вопросы - но это уже следующий уровень после включения мозга) Без первого никак)
0
Max Dark
шКодер самоучка
1866 / 1666 / 605
Регистрация: 09.10.2013
Сообщений: 3,707
Записей в блоге: 6
Завершенные тесты: 2
05.10.2016, 19:19 #7
Цитата Сообщение от Leffken Посмотреть сообщение
мне нужен override
override используется для указания, что мы хотим переопределить виртуальный метод из родительского класса, с невиртуальными он не используется.
Да и вещь эта необязательная - больше для самоконтроля.
Написав override мы говорим компилятору, чтобы он проверил 2 условия:
  • что метод с такой сигнатурой определен в родителе
  • и что он является virtual
0
Leffken
0 / 0 / 0
Регистрация: 24.06.2012
Сообщений: 112
05.10.2016, 19:34  [ТС] #8
Мог бы тему создать, но все таки в продолжение ...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class A {
private:
int a,b,c;
public:
A(int a, int b, int c){
a=a;b=b;c=c;
}
};
class B : public A{
private:
int x,y,z;
public:
B(int x, int y, int z){
x=x;y=y;z=z;
}
};
main() {
B obj(5,5,5); // как быть с атрибутами родительского класса ? 
}
0
rikimaru2013
C++ Game Dev
2471 / 1140 / 241
Регистрация: 30.11.2013
Сообщений: 3,709
05.10.2016, 19:41 #9
Leffken,
1) ваш код не компилиться http://rextester.com/EQMC52074
2) у родительского класса нету атрибутов в данному коде
1
Max Dark
шКодер самоучка
1866 / 1666 / 605
Регистрация: 09.10.2013
Сообщений: 3,707
Записей в блоге: 6
Завершенные тесты: 2
05.10.2016, 19:43 #10
Цитата Сообщение от Leffken Посмотреть сообщение
как быть с атрибутами родительского класса ?
нужно вызвать конструктор родительского класса и передать ему параметры
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
#include <iostream>
 
class A {
private:
    int a;
public:
    A(int a):a(a) {}
    virtual void print() {
        std::cout << "A::a == " << a << std::endl;
    }
};
 
class B:public A {
private:
    int b;
public:
    B(int a, int b):A(a),b(b) {}
    virtual void print() override {
        A::print();
        std::cout << "B::b == " << b << std::endl;
    }
};
 
int main() {
    B b(1, 2);
    b.print();
    return 0;
}
http://ideone.com/uyd1d4
0
rikimaru2013
05.10.2016, 19:47
  #11

Не по теме:

Max Dark, и где там атрибуты)

0
Leffken
0 / 0 / 0
Регистрация: 24.06.2012
Сообщений: 112
05.10.2016, 19:51  [ТС] #12
Если есть конструктор без параметров у родительского класса и дочернего, при создании объекта дочернего класса конструктор родительского класса так же вызовется?

Добавлено через 1 минуту
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Leffken,
1) ваш код не компилиться http://rextester.com/EQMC52074
2) у родительского класса нету атрибутов в данному коде
1) Он компилиться вряд ли будет, я на вскидку писал прямо тут ..
2) А как называется ?
C++
1
2
private:
int a,b,c;
0
Max Dark
шКодер самоучка
1866 / 1666 / 605
Регистрация: 09.10.2013
Сообщений: 3,707
Записей в блоге: 6
Завершенные тесты: 2
05.10.2016, 20:42 #13
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Leffken Посмотреть сообщение
Если есть конструктор без параметров у родительского класса и дочернего, при создании объекта дочернего класса конструктор родительского класса так же вызовется?
если в описании конструктора дочернего класса не указано явно какой родительский конструктор использовать, то будет вызван конструктор "по умолчанию"(без параметров)
http://ideone.com/XbQSrN
http://ideone.com/FckQPH
Цитата Сообщение от Leffken Посмотреть сообщение
А как называется ?
field(поле) либо member(член)
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2016, 20:42
Привет! Вот еще темы с ответами:

Ошибка при наследовании - C++
Подскажите пожалуйста почему наследование класса readwrite не работает? //Программа считывает данные из файла и строит графики ...

Деструктор при наследовании - C++
Имеется 3 класса (базовый -&gt; производный -&gt; производный2) в классе базовый имеется переменная char* var; в производном тоже есть 1...

Ошибка при наследовании - C++
Имеется архитектура вида: класс &quot;человек&quot;, от него производные &quot;препод&quot; и &quot;член приемной комиссии&quot;. От их двоих производный класс &quot;Препод и...

Ошибка при наследовании - C++
Привет! Ни как не могу разобраться, в чём дело. Создал 2 класса: Base и Derived, где Derived наследует Base. Но при компиляции возникает...


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

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

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