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

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

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

Классы наследования - C++

06.08.2012, 22:35. Просмотров 609. Ответов 13
Метки нет (Все метки)

Необходима чтобы personcart содержал массив карточек персон (класс cart) как не крутил вечная ошибка
fatal error LNK1120: 1 unresolved externals
помогите разобраться как от нее избавиться.

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
#include <conio.h>
using namespace std;
 
 
class Kart
{
    char  Familiya[20];                                                           //klass kartochka 
    int day; int month; int year;
 
public:
   void Ent(); // Dobavlenie kartochki
   void OutPut(); // Vivod
};
void Kart::Ent()
{
    cout<<"Enter family: "; cin>>Familiya;
    cout<<"data"; cin>>day;cin>>month;cin>>year;
    cout<<"Kartochka yes"<<endl<<endl;
}
void Kart::OutPut()
{
    cout<<endl<<"Familiya"<<endl;
    cout<<"Familiya "<<Familiya<<endl;
   cout<<"Data: "<<day<<"/"<<month<<"/"<<year<<"/"<<endl<<endl;
};
 
 
 
 
class Array                                   //Zadaem massiv
{
protected:
    static int max;
    Kart *list;
    int n;
public:
    Array();
    Kart operator [] (int);
 
};
 
int Array::max = 10;
Array::Array()
{
    list = new Kart [max];
    n = 0;
}
 
Kart Array::operator [] (int i)
{
    Kart res;
    if (i < n)
        res = list[i];
    else
        res = list[n-1];
    return res;
}
 
 
 
class Personcart: public Array               // Personkart
{
private:
    Kart *list; 
          
public:
    Personcart(); 
void Enter() ;
    };
 
 
void Personcart::Enter() 
{
        for (int i = 0; i<n; i++)
    {
        cout<<" Print book "<<i<<endl;
        list[i].Ent();
    }
}
 
 
int main()
{
    setlocale(0,"Rus");
    Personcart ac;
    ac.Enter();
    getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2012, 22:35     Классы наследования
Посмотрите здесь:

Классы и основы наследования, с++ - C++
Последняя лабораторная работа семестра. Немаленькая...про классы мало что знаю. Сложно ли это сделать? Не могли бы помочь ? 1....

Классы наследования, немножко не доделал - C++
Доброго времени суток!! Ребята, прошу, помогите! У меня есть программа с 3 классами: точка,эллипс и эллипсоид, нужно сделать то же, только...

Спроектировать классы, находящиеся в отношении наследования - C++
вот код, ошибку выдает хелп плиз #include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include &lt;iostream&gt; #include &quot;string.h&quot; using...

Разработать программу с использованием наследования классов, реализующую классы - C++
Ребят помоги пожалуйста начинающему программисту. Использовать максимально возможное количество возможных функций (не менее 3), а...

Связать следующие классы в иерархию наследования: ArcherCharacter, Wizard, SwordsMan, LongRange - C++
Character (Персонаж), LongRange (Персонаж дальнего действия), Wizard (Маг), SwordsMan (Мечник), Archer (Лучник). #include &lt;string&gt; //...

Разработать программу с использованием наследования классов, реализующую классы: точка; линия; круг - C++
помогите написать программу: Разработать программу с использованием наследования классов, реализующую классы: точка; линия; круг....

чем отличаются структуры для наследования интерфейса, от структур, для наследования реализаций - C++
Дорогие программисты, во первых, хочу поздравить вас с Наступающим новым Годом! Я к вам обращаюсь с маленькой просьбой. Я никак не могу...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
5474 / 1840 / 342
Регистрация: 10.12.2010
Сообщений: 5,431
Записей в блоге: 3
06.08.2012, 22:38     Классы наследования #2
Текст ошибки приведите.
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
06.08.2012, 22:38     Классы наследования #3
Конструктор Personcart объявлен, но не определён. Напишите реализацию конструктора Personcart.
Holand
8 / 5 / 1
Регистрация: 30.03.2012
Сообщений: 14
06.08.2012, 22:40     Классы наследования #4
В класе
C++
1
Personcart
не определен конструктор, а ты его используешь. Вот например выход из ситуации.
C++
1
2
3
4
Personcart()
    {
        list = new Kart();
    }
Vak1
0 / 0 / 0
Регистрация: 06.08.2012
Сообщений: 9
06.08.2012, 22:46  [ТС]     Классы наследования #5
Цитата Сообщение от Holand Посмотреть сообщение
не определен конструктор, а ты его используешь.
я ведь это делаю в класс array или получается он не нужен
DU
1481 / 1057 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
06.08.2012, 22:50     Классы наследования #6
получается что не нужен. его нужно убрать и убрать мембер Kart *list; оставить только функцию Enter.

Вот еще по заданию: " содержал массив карточек персон "
это значит что класс должен содержать в себе мембер типа массива, а не наследоваться от массива. Так что есть смысл рассмотреть и такой вариант.
Holand
8 / 5 / 1
Регистрация: 30.03.2012
Сообщений: 14
06.08.2012, 22:50     Классы наследования #7
Цитата Сообщение от Vak1 Посмотреть сообщение
я ведь это делаю в класс array или получается он не нужен
Конструктор не может быть виртуальным, поскольку для правильного построения объекта он должен знать его истинный тип. Тоесть в дочернем классе тебе следует всегда его определять если используешь переменную типа дочернего класса.
DU
1481 / 1057 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
06.08.2012, 22:54     Классы наследования #8
Конструктор не может быть виртуальным, поскольку для правильного построения объекта он должен знать его истинный тип. Тоесть в дочернем классе тебе следует всегда его определять если используешь переменную типа дочернего класса.
это нужно если у базового класса нет дефолтных конструкторов. у класса Array такой конструктор есть. Значит дефолтные конструкторы наследников можно не делать, если они ничего особенного не делают.
Holand
8 / 5 / 1
Регистрация: 30.03.2012
Сообщений: 14
06.08.2012, 22:56     Классы наследования #9
DU, ну здесь его можно было сделать хотя бы для зануления или создания указателя ) И кстати, именно на это ругался линкер - небыло конструктора.
Vak1
0 / 0 / 0
Регистрация: 06.08.2012
Сообщений: 9
06.08.2012, 23:12  [ТС]     Классы наследования #10
так? все таки на сколько необходим класс array, и при данном коде ошибок не выдает однако ввести ничего я не могу

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <iostream>
#include <conio.h>
using namespace std;
 
 
class Kart
{
    char  Familiya[20];                                                           //klass kartochka 
    int day; int month; int year;
 
public:
   void Ent(); // Dobavlenie kartochki
   void OutPut(); // Vivod
};
void Kart::Ent()
{
    cout<<"Enter family: "; cin>>Familiya;
    cout<<"data"; cin>>day;cin>>month;cin>>year;
    cout<<"Kartochka yes"<<endl<<endl;
}
void Kart::OutPut()
{
    cout<<endl<<"Familiya"<<endl;
    cout<<"Familiya "<<Familiya<<endl;
   cout<<"Data: "<<day<<"/"<<month<<"/"<<year<<"/"<<endl<<endl;
};
 
 
 
 
class Array                                   //Zadaem massiv
{
protected:
    static int max;
    Kart *list;
    int n;
public:
    Array();
    Kart operator [] (int);
 
};
 
int Array::max = 10;
Array::Array()
{
    list = new Kart [max];
    n = 0;
}
 
Kart Array::operator [] (int i)
{
    Kart res;
    if (i < n)
        res = list[i];
    else
        res = list[n-1];
    return res;
}
 
 
 
class Personcart: public Array               // Personkart
{
private:
    Kart *list; 
    static int max;
          
public:
    Personcart(); 
void Enter() ;
    };
 
 
int Personcart::max = 10;
Personcart::Personcart()
{
    list = new Kart [max];
    n = 0;
}
 
void Personcart::Enter() 
{
        for (int i = 0; i<n; i++)
    {
        cout<<" Cart "<<i<<endl;
        list[i].Ent();
    }
}
 
 
int main()
{
    setlocale(0,"Rus");
    Personcart ac;
    ac.Enter();
    getch();
    return 0;
}
DU
1481 / 1057 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
06.08.2012, 23:13     Классы наследования #11
ну здесь его можно было сделать хотя бы для зануления или создания указателя ) И кстати, именно на это ругался линкер - небыло конструктора.
Это я понял. Он был объявлен но не определен. Хотя можно было бы и не объявлять даже. Вся нужная инициализация должна делаться в конструкторе класса Array что и происходит. Там разве что обнуления нет, но логичнее всего туда же это обнуление и добавить. Класс наследник сделан лишь для того, чтобы в него вписать одну функцию Enter. О целесообразности наследования я уже писал. Так что в конкретном примере ТС дефолтный конструктор у класса Personcart ничего не делает, поэтому его и нет смысла объявлять и определять.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
06.08.2012, 23:16     Классы наследования #12
у вас personcart наверно содержит в себе Array, а не наследуется от него. Используйте композицию
DU
1481 / 1057 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
06.08.2012, 23:19     Классы наследования #13
короче вот раз уж с наследованием хотите мутить, то вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Personcart: public Array               // Personkart
{
public:
  void Enter();
};
 
void Personcart::Enter() 
{
  for (int i = 0; i<n; i++)
  {
    cout<<" Cart "<<i<<endl;
    list[i].Ent();
  }
}
А ничего не получается у вас потому что цикл не выполняется, потому что n = 0. Проинициализируйте n не нулем и код в цикле начнет выполнятся.
Нужен Array или не нужен - сами решайте. В таком виде от него мало пользы. В конструкторе разве что выделяется массив. Больше ничего полезного не делается, те функции которые есть плохо сделаны и ими будет неудобно пользоваться. Нет деструктора, нет нормального копирования.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2012, 12:18     Классы наследования
Еще ссылки по теме:

Наследования - C++
Что именно наследует класс-потомок при наследовании? А что не наследует? Чем отличаются private, public и protected наследование?

Наследования - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class student { protected: int sem; string name; float...

наследования - C++
Приведите пожалуйста пару примеров наследования.

Класс наследования - C++
ак єто можно сделать Класс одиночного наследования. a) Модифицировать класс динамической структуры данных,содержащей строки (л.р. №2),...

Пример наследования - C++
Здравствуйте! Снова требуется пример. На сей раз пример наследования. Ничего подходящего пока найти не могу. Допустим, базовый класс и...


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

Или воспользуйтесь поиском по форуму:
Vak1
0 / 0 / 0
Регистрация: 06.08.2012
Сообщений: 9
07.08.2012, 12:18  [ТС]     Классы наследования #14
Большое спасибо что помогли разобраться как работает данная конструкция. Все работает. Я как понял array в данном случае не нужен, но у меня там еще большая куча функций которые надо реализовать так что с ним будет как мне кажется удобнее.
Yandex
Объявления
07.08.2012, 12:18     Классы наследования
Ответ Создать тему
Опции темы

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