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

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

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

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

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

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

Или делать по человечески get & set для каждого атрибута ? Но хотелось бы разобраться с вопросом доопределения.
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> ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Max Dark
шКодер самоучка
1814 / 1615 / 589
Регистрация: 09.10.2013
Сообщений: 3,622
Записей в блоге: 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
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
Только подумал про вызов родительского метода, загуглил и решил посмотреть что мне на форуме ответили ... стоит только не много подумать мозжечком ))))
Спасибо, то что нужно !
rikimaru2013
C++ Game Dev
2429 / 1123 / 240
Регистрация: 30.11.2013
Сообщений: 3,673
05.10.2016, 19:13 #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Leffken Посмотреть сообщение
стоит только не много подумать мозжечком ))))
Цитата Сообщение от Leffken Посмотреть сообщение
если я использую просто void (не virtual void) мне нужен override ?
Нам подождать пока вы мозг включите или можно отвечать?)
Leffken
0 / 0 / 0
Регистрация: 24.06.2012
Сообщений: 112
05.10.2016, 19:15  [ТС] #5
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Нам подождать пока вы мозг включите или можно отвечать?)
Уже почти подумал )))
Спасибо.
rikimaru2013
C++ Game Dev
2429 / 1123 / 240
Регистрация: 30.11.2013
Сообщений: 3,673
05.10.2016, 19:19 #6
Leffken,
Кликните здесь для просмотра всего текста
Там еще можно пробовать у себя в студии ваши вопросы - но это уже следующий уровень после включения мозга) Без первого никак)
Max Dark
шКодер самоучка
1814 / 1615 / 589
Регистрация: 09.10.2013
Сообщений: 3,622
Записей в блоге: 6
Завершенные тесты: 2
05.10.2016, 19:19 #7
Цитата Сообщение от Leffken Посмотреть сообщение
мне нужен override
override используется для указания, что мы хотим переопределить виртуальный метод из родительского класса, с невиртуальными он не используется.
Да и вещь эта необязательная - больше для самоконтроля.
Написав override мы говорим компилятору, чтобы он проверил 2 условия:
  • что метод с такой сигнатурой определен в родителе
  • и что он является virtual
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); // как быть с атрибутами родительского класса ? 
}
rikimaru2013
C++ Game Dev
2429 / 1123 / 240
Регистрация: 30.11.2013
Сообщений: 3,673
05.10.2016, 19:41 #9
Leffken,
1) ваш код не компилиться http://rextester.com/EQMC52074
2) у родительского класса нету атрибутов в данному коде
Max Dark
шКодер самоучка
1814 / 1615 / 589
Регистрация: 09.10.2013
Сообщений: 3,622
Записей в блоге: 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
rikimaru2013
05.10.2016, 19:47
  #11

Не по теме:

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

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;
Max Dark
шКодер самоучка
1814 / 1615 / 589
Регистрация: 09.10.2013
Сообщений: 3,622
Записей в блоге: 6
Завершенные тесты: 2
05.10.2016, 20:42 #13
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Leffken Посмотреть сообщение
Если есть конструктор без параметров у родительского класса и дочернего, при создании объекта дочернего класса конструктор родительского класса так же вызовется?
если в описании конструктора дочернего класса не указано явно какой родительский конструктор использовать, то будет вызван конструктор "по умолчанию"(без параметров)
http://ideone.com/XbQSrN
http://ideone.com/FckQPH
Цитата Сообщение от Leffken Посмотреть сообщение
А как называется ?
field(поле) либо member(член)
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. Но при компиляции возникает...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.10.2016, 20:42
Ответ Создать тему
Опции темы

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