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

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

Восстановить пароль Регистрация
 
Leffken
0 / 0 / 0
Регистрация: 24.06.2012
Сообщений: 98
05.10.2016, 18:51     ООП доопределить класс при наследовании #1
Привет всем, задался таким вопросом.
Есть класс животные, в нем есть атрибуты и метод для распечатки этих атрибутов.
Далее наследую класс млекопитающие, соответственно будут добавлены кое какие атрибуты.
Существует ли возможность доопределить класс распечатки, чтобы заново не определять уже печатающиеся атрибуты класса животные ?

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

С++ течет при наследовании C++
C++ Ошибка при наследовании?
Конструкторы при наследовании C++
Сравнение при наследовании C++
C++ Неоднозначность при наследовании
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 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
Сообщений: 98
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
 Аватар для rikimaru2013
2139 / 972 / 223
Регистрация: 30.11.2013
Сообщений: 3,241
05.10.2016, 19:13     ООП доопределить класс при наследовании #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Leffken Посмотреть сообщение
стоит только не много подумать мозжечком ))))
Цитата Сообщение от Leffken Посмотреть сообщение
если я использую просто void (не virtual void) мне нужен override ?
Нам подождать пока вы мозг включите или можно отвечать?)
Leffken
0 / 0 / 0
Регистрация: 24.06.2012
Сообщений: 98
05.10.2016, 19:15  [ТС]     ООП доопределить класс при наследовании #5
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Нам подождать пока вы мозг включите или можно отвечать?)
Уже почти подумал )))
Спасибо.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2139 / 972 / 223
Регистрация: 30.11.2013
Сообщений: 3,241
05.10.2016, 19:19     ООП доопределить класс при наследовании #6
Leffken,
Кликните здесь для просмотра всего текста
Там еще можно пробовать у себя в студии ваши вопросы - но это уже следующий уровень после включения мозга) Без первого никак)
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
05.10.2016, 19:19     ООП доопределить класс при наследовании #7
Цитата Сообщение от Leffken Посмотреть сообщение
мне нужен override
override используется для указания, что мы хотим переопределить виртуальный метод из родительского класса, с невиртуальными он не используется.
Да и вещь эта необязательная - больше для самоконтроля.
Написав override мы говорим компилятору, чтобы он проверил 2 условия:
  • что метод с такой сигнатурой определен в родителе
  • и что он является virtual
Leffken
0 / 0 / 0
Регистрация: 24.06.2012
Сообщений: 98
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
 Аватар для rikimaru2013
2139 / 972 / 223
Регистрация: 30.11.2013
Сообщений: 3,241
05.10.2016, 19:41     ООП доопределить класс при наследовании #9
Leffken,
1) ваш код не компилиться http://rextester.com/EQMC52074
2) у родительского класса нету атрибутов в данному коде
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 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
Сообщений: 98
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;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2016, 20:42     ООП доопределить класс при наследовании
Еще ссылки по теме:

Деструктор при наследовании C++
C++ Присвоение при наследовании
Ошибка при наследовании C++

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

Или воспользуйтесь поиском по форуму:
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
05.10.2016, 20:42     ООП доопределить класс при наследовании #13
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Leffken Посмотреть сообщение
Если есть конструктор без параметров у родительского класса и дочернего, при создании объекта дочернего класса конструктор родительского класса так же вызовется?
если в описании конструктора дочернего класса не указано явно какой родительский конструктор использовать, то будет вызван конструктор "по умолчанию"(без параметров)
http://ideone.com/XbQSrN
http://ideone.com/FckQPH
Цитата Сообщение от Leffken Посмотреть сообщение
А как называется ?
field(поле) либо member(член)
Yandex
Объявления
05.10.2016, 20:42     ООП доопределить класс при наследовании
Ответ Создать тему
Опции темы

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