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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.76
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
#1

Наследование - C++

08.03.2009, 23:34. Просмотров 4933. Ответов 16
Метки нет (Все метки)

Например, есть класс cA и его наследник – класс cB. В определении класса cB написали функцию func, а в её сигнатуре объект родительского класса. При использовании это функции компилятор пропускает, если в качестве параметра стоит объект класса cB.

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
#include <iostream>
using namespace std;
class cA
{
private:
    int a;
};
 
class cB: public cA
{
public:
    void func (cA & o)
    {
        cout << "func\n";
    }
};
 
int main ()
{
    cA a;
    cB b;
    b.func (b);
    b.func (a);
}
Это нормально, что компилятор пропускает, когда в объявлении функции func стоит класс cA, а при использовании этой функции используется наследник этого класса - класс cB или это может привести к каким-нибудь ошибкам?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2009, 23:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наследование (C++):

Заменить наследование классов на наследование интерфейсов - C++
#include &lt;iostream&gt; #include &lt;assert.h&gt; using namespace std; int people_on_base = 100; int vehicles_on_base = 100; double...

Наследование - C++
char* Texts :: SetBit() { char a; int b; cout &lt;&lt; &quot;Получаем битовую строку&quot; &lt;&lt; endl; cin &gt;&gt; a; b = strlen(a);...

наследование - C++
Пытаюсь разобраться в наследовании Есть класс class File { public: struct comp { char num; // Имя переменной char st;...

Наследование - C++
Всем привет. Может кто нибудь подсказать с чего начать при создании класса для работы с файлами на подобии ostream( а точнее как правильно...

наследование - C++
определить базовый класс ''точка''. Затем от него определить два произвольных класса ''прямоугольник'' и ''параллелепипед'', в каждом из...

Наследование?! - C++
привет всем. Есть класс Circle c1, c2, c3 Нужно реализовать через наследование класс множество, прошу помочь как он будет выглядеть...

16
Alexiski
Любитель давать советы
339 / 131 / 2
Регистрация: 12.01.2009
Сообщений: 511
08.03.2009, 23:47 #2
Это очень даже нормально, так как всякий объект дочернего класса cB одновременно является полноценным объектом родительского класса .
Вот в обратную сторону - в общем случае нельзя.
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
10.03.2009, 00:48  [ТС] #3
Спасибо!
Я знаю что, конструкторы не наследуются, но если в классе есть конструктор, то надо ли его писать в классе-наследнике, если в нём нет указателей (если в обычных условия конструктор не нужен)?
0
Alexiski
Любитель давать советы
339 / 131 / 2
Регистрация: 12.01.2009
Сообщений: 511
10.03.2009, 10:17 #4
Если базовый класс имеет конструктор по умолчанию, то наследник может обходиться без конструктора. Но если у базового класса конструктора по умолчанию нет, то потребуется создать хотя бы пустой конструктор в наследнике, потому что в нем нужно указать параметры, передаваемые в конструктор базового класса
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
11.03.2009, 01:14  [ТС] #5
Я немного не о том.
Например, есть класс и наследник:
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
class A
{
public:
    A ()
    {
        name = new char [15];
    }
    A (A & a)    // Конструктор копирования
    {
        name = new char [strlen (a.name)+1];
        strcpy (name, a.name);
    }
 
private:
    char* name;
};
 
class B: public A
{
private:
    int age;
};
В классе A есть конструктор копирования. Если рассматривать класс B не как наследник, а отдельный класс, то конструктор копирования не нужен:
C++
1
2
3
4
5
6
7
class B
{
private:
    int age;
};
У меня такой вопрос, в первом случае, где B – наследник, нужен конструктор копирования для B?
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
11.03.2009, 01:23 #6
нет... конструктор вроде бы не нужен...

p.s: в конструкторе ты выделяешь память.. но она у тебя не освобождается.. создай деструктор и освобождай ее там.
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
11.03.2009, 15:47  [ТС] #7
А можно немного больше определённости - нужн точно или нет?
А этот пример только демонстрациооный, деструкторы в нём не обязательны
0
ISergey
Maniac
Эксперт С++
1375 / 886 / 52
Регистрация: 02.01.2009
Сообщений: 2,661
Записей в блоге: 1
11.03.2009, 16:20 #8
C++ неявно создает некоторые функции, тоесть
C++
1
class Empty {};
это будет равносильно
C++
1
2
3
4
5
6
7
8
9
class Empty {
public:
    Empty();// Конструктор по умолчанию
    Empty(const Empty& rhs);// Конструктор копирования
    ~Empty();// Деструктор
    Empty& operator = (const Empty& rhs);// Оператор присваивания
    Empty* operator&();// Операторы получения адреса
    const Empty* operator&() const;
};
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
11.03.2009, 23:55  [ТС] #9
Это немного не то.
Стандартный конструктор копирования работает плохо, если в классе есть данные-члены указатели. Меня интересует вопрос, нужен ли конструктор копирования в классе-наследнике, чтобы нормально скопировать указатели класса.
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
11.03.2009, 23:58 #10
нет..конструктор и методы класса наследуются!
0
ISergey
Maniac
Эксперт С++
1375 / 886 / 52
Регистрация: 02.01.2009
Сообщений: 2,661
Записей в блоге: 1
12.03.2009, 00:03 #11
Я не могу понять ваш вопрос! Если в классе есть указатели, то конструктор копирования должен быть и оператор копирования тоже!
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
12.03.2009, 00:16  [ТС] #12
Кто тебе сказал, что конструкторы наследуются?
У меня возникает вопрос в том, вызывает ли класс-наследник конструктор, чтобы скопировать те данные-члены, которые относятся к тому классу.

Добавлено через 4 минуты 58 секунд
Не заметил новое сообщение.
Это и понятно. Нужен ли в классе-наследнике конструктор, чтобы скопировать данные-члены первого класса?
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
12.03.2009, 00:26 #13
я просто учил ооп... если в производном класе не определен конструктор, то будет использоваться конструктор из базового класса (соответствующий запросу, если их несколько).
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
12.03.2009, 00:37  [ТС] #14
Это же не есть наследование. Это просто вызов конструктора для построения соответсвующих данных.
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
12.03.2009, 00:44 #15
я тебя не пойму ... это не конструктор поумолчанию.. если ты в Классе А опишешь какой-то уникальный конструктор, а в классе В не упомянешь конструктор вообще, то тогда в классе В будет вызываться конструктор класса А
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2009, 00:44
Привет! Вот еще темы с ответами:

наследование - C++
Как наследовать классы с использованием виртуальных функций? Можете привести пример?

наследование в С++ - C++
Добрый вечер. относительно недавно мною была получена задача, а точнее несколько задач в одной...И как это ни печально звучит, проблемы...

наследование - C++
помогите пожалуйсто дописать класс многоугольников , и рисовать на монитор с помощью mfc , заранее благодарен... class figure{ public: ...

Наследование в C++ - C++
Прошу помощи, ибо С++ не моё, а лабораторные работы девушке сдавать надо: Создать 1 базовый класс и несколько производных. Все...


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

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

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