Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
Саня gamer
97 / 71 / 5
Регистрация: 18.05.2011
Сообщений: 343
Записей в блоге: 1
1

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

07.02.2013, 20:57. Просмотров 1044. Ответов 10
Метки нет (Все метки)

В инете немного почиатл про наследование и решил сразу перейти к практике
Есть два класа 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)
или как написано в исходнике.
Проблема появилась после того как я разделил код на объявление и реализацию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2013, 20:57
Ответы с готовыми решениями:

Вызов конструктора базового класса
Здравствуйте! Я вот начал изучать C# и немножечко освежил ООП. Но вот у меня...

Вызов конструктора базового класса из порожденного
Есть Базовый класс студент: имеет поля: фамилия, адрес, тел., возраст. ...

Вызов конструктора базового класса из класса-наследника
Можно ли вне списка инициализации вызвать конструктор базового класса ? ...

Вызов базового конструктора
Такая вот ситуация. Думаю, проблема в объявлении и инициализации массива m. Я...

Вызвать конструктор производного класса без конструктора базового класса
Здравствуйте! У меня есть базовый класс треугольник и производный класс...

10
Croessmah
++Ͻ
14610 / 8364 / 1576
Регистрация: 27.09.2012
Сообщений: 20,561
Записей в блоге: 2
Завершенные тесты: 1
07.02.2013, 21:04 2
Если не указать какой конструктор базового класса вызывать, то будет вызван конструктор базового класса без параметров.
1
Саня gamer
97 / 71 / 5
Регистрация: 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)
работает. А когда разделил- не работает
0
Croessmah
++Ͻ
14610 / 8364 / 1576
Регистрация: 27.09.2012
Сообщений: 20,561
Записей в блоге: 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)
1
Саня gamer
97 / 71 / 5
Регистрация: 18.05.2011
Сообщений: 343
Записей в блоге: 1
07.02.2013, 21:26  [ТС] 5
Именно!!!
Уже разобрался, не успел написать.
Спс

Добавлено через 2 минуты
А ету часть не обязательно писать?
C++
1
:point(int a, int b)
0
Croessmah
++Ͻ
14610 / 8364 / 1576
Регистрация: 27.09.2012
Сообщений: 20,561
Записей в блоге: 2
Завершенные тесты: 1
07.02.2013, 21:29 6
Цитата Сообщение от Саня gamer Посмотреть сообщение
А ету часть не обязательно писать?
без нее будет вызван конструктор без параметров, то есть равносильно
C++
1
apoint::apoint(int a,int b,int c):point()
0
Саня gamer
97 / 71 / 5
Регистрация: 18.05.2011
Сообщений: 343
Записей в блоге: 1
07.02.2013, 21:33  [ТС] 7
А зачем вызывать конструктор если он ничего не делает?
0
Croessmah
++Ͻ
14610 / 8364 / 1576
Регистрация: 27.09.2012
Сообщений: 20,561
Записей в блоге: 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;
}
0
Саня gamer
97 / 71 / 5
Регистрация: 18.05.2011
Сообщений: 343
Записей в блоге: 1
07.02.2013, 21:39  [ТС] 9
Кажется понял: Нада поделить роли, чтоб конструктор производного класа не выполнял задания с которыми может справится конструктор базового класса))
Както так?
0
Croessmah
++Ͻ
14610 / 8364 / 1576
Регистрация: 27.09.2012
Сообщений: 20,561
Записей в блоге: 2
Завершенные тесты: 1
07.02.2013, 21:56 10
Цитата Сообщение от Саня gamer Посмотреть сообщение
Кажется понял: Нада поделить роли, чтоб конструктор производного класа не выполнял задания с которыми может справится конструктор базового класса))
Както так?
ну можно и так сказать =) но всё-таки почитайте далее книжку )
1
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
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)
Это что такое?
0
07.02.2013, 22:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2013, 22:05

Реализовать классы «стек» и «очередь» наследованием от базового класса «двусвязный список»
Всем добрый вечер! Помогите пожалуйста с лабораторной работой, дело в том что...

Наследование конструктора из базового класса
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace...

Инициализация конструктора базового класса
class animal { public: animal(int a):ianimal(a){} protected: int...


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

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

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