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

Знакомство с наследованием. Вызов конструктора базового класса - C++

Восстановить пароль Регистрация
 
Саня gamer
96 / 70 / 1
Регистрация: 18.05.2011
Сообщений: 343
Записей в блоге: 1
07.02.2013, 20:57     Знакомство с наследованием. Вызов конструктора базового класса #1
В инете немного почиатл про наследование и решил сразу перейти к практике
Есть два класа point и apoint
вот хидер
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
#ifndef POINT_H_INCLUDED
#define POINT_H_INCLUDED
 
class point
{
public:
    point(int x, int y);
    point();
    void print();
    int x, y;
    friend point operator+ (point a, point b);
    friend point operator- (point a, point b);
 
};
 
class apoint:public point
{
public:
    int color;
    apoint(int a, int b, int c);
    void ap();
 
};
 
#endif // POINT_H_INCLUDED
и реализация
Кликните здесь для просмотра всего текста
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
46
47
48
49
50
51
52
53
54
#include <iostream>
#include "point.h"
using namespace std;
 
point::point()
{
    x=0;
    y=0;
}
 
void point::print()
{
    cout<<"x= "<<x<<endl
        <<"y= "<<y<<endl;
}
point::point(int inx, int iny)
{
    x=inx;
    y=iny;
}
//плюс и минус
point operator+ (point a, point b)
{
    point tmp;
    tmp.x=a.x+a.x;
    tmp.y=a.y+b.y;
    return tmp;
}
point operator- (point a, point b)
{
    point tmp;
    tmp.x=a.x-a.x;
    tmp.y=a.y-b.y;
    return tmp;
}
 
apoint::apoint(int a,int b,int c)
{
    x=a;
    y=b;
    color=c;
}
void apoint::ap()
{
    cout<<"apoint"<<endl;
}
int main ()
{
 
    apoint aptest(3,70,5);
    aptest.ap();
    aptest.print();
    return 0;
}

Скажите конструктор производного класа должен быть таким:
C++
1
apoint::apoint(int a,int b,int c):point(int inx, int iny)
или как написано в исходнике.
Проблема появилась после того как я разделил код на объявление и реализацию.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2013, 20:57     Знакомство с наследованием. Вызов конструктора базового класса
Посмотрите здесь:

Вызов конструктора базового класса C++
C++ Реализовать классы «стек» и «очередь» наследованием от базового класса «двусвязный список»
Вызов метода базового класса из класса-потомка C++
C++ Использование конструктора базового класса при динамическом выделении памяти
C++ Вызов конструктора базового класса из порожденного
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
07.02.2013, 21:04     Знакомство с наследованием. Вызов конструктора базового класса #2
Если не указать какой конструктор базового класса вызывать, то будет вызван конструктор базового класса без параметров.
Саня gamer
96 / 70 / 1
Регистрация: 18.05.2011
Сообщений: 343
Записей в блоге: 1
07.02.2013, 21:16  [ТС]     Знакомство с наследованием. Вызов конструктора базового класса #3
суть проблемы в том что:
когда конструктор производного класа пишу в объявлении класса то такая конструкция работает
C++
1
apoint::apoint(int a,int b,int c):point(int inx, int iny)
работает. А когда разделил- не работает
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
07.02.2013, 21:22     Знакомство с наследованием. Вызов конструктора базового класса #4
Может что-то вроде:
C++
1
apoint::apoint(int a,int b,int c):point(int a, int b)//вместо :point(int inx, int iny)
Саня gamer
96 / 70 / 1
Регистрация: 18.05.2011
Сообщений: 343
Записей в блоге: 1
07.02.2013, 21:26  [ТС]     Знакомство с наследованием. Вызов конструктора базового класса #5
Именно!!!
Уже разобрался, не успел написать.
Спс

Добавлено через 2 минуты
А ету часть не обязательно писать?
C++
1
:point(int a, int b)
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
07.02.2013, 21:29     Знакомство с наследованием. Вызов конструктора базового класса #6
Цитата Сообщение от Саня gamer Посмотреть сообщение
А ету часть не обязательно писать?
без нее будет вызван конструктор без параметров, то есть равносильно
C++
1
apoint::apoint(int a,int b,int c):point()
Саня gamer
96 / 70 / 1
Регистрация: 18.05.2011
Сообщений: 343
Записей в блоге: 1
07.02.2013, 21:33  [ТС]     Знакомство с наследованием. Вызов конструктора базового класса #7
А зачем вызывать конструктор если он ничего не делает?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
07.02.2013, 21:37     Знакомство с наследованием. Вызов конструктора базового класса #8
Цитата Сообщение от Саня gamer Посмотреть сообщение
А зачем вызывать конструктор если он ничего не делает?
инициализировать базовый класс кто будет тогда?
Можете свой конструктор переписать так:
C++
1
2
3
4
apoint::apoint(int a,int b,int c):point(a,b)
{
    color=c;
}
Саня gamer
96 / 70 / 1
Регистрация: 18.05.2011
Сообщений: 343
Записей в блоге: 1
07.02.2013, 21:39  [ТС]     Знакомство с наследованием. Вызов конструктора базового класса #9
Кажется понял: Нада поделить роли, чтоб конструктор производного класа не выполнял задания с которыми может справится конструктор базового класса))
Както так?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
07.02.2013, 21:56     Знакомство с наследованием. Вызов конструктора базового класса #10
Цитата Сообщение от Саня gamer Посмотреть сообщение
Кажется понял: Нада поделить роли, чтоб конструктор производного класа не выполнял задания с которыми может справится конструктор базового класса))
Както так?
ну можно и так сказать =) но всё-таки почитайте далее книжку )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2013, 22:05     Знакомство с наследованием. Вызов конструктора базового класса
Еще ссылки по теме:

Инициализация конструктора базового класса C++
Вызов конструктора базового класса из класса-наследника C++
C++ Структура программы или наследование, без использования конструктора базового класса

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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
07.02.2013, 22:05     Знакомство с наследованием. Вызов конструктора базового класса #11
Цитата Сообщение от Саня gamer Посмотреть сообщение
чтоб конструктор производного класа не выполнял задания с которыми может справится конструктор базового класса))
В начале всегда вызывается конструктор базового класса.

Добавлено через 16 секунд
Цитата Сообщение от Croessmah Посмотреть сообщение
apoint::apoint(int a,int b,int c)oint(int a, int b)//вместо oint(int inx, int iny)
Это что такое?
Yandex
Объявления
07.02.2013, 22:05     Знакомство с наследованием. Вызов конструктора базового класса
Ответ Создать тему
Опции темы

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