Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/12: Рейтинг темы: голосов - 12, средняя оценка - 4.75
5 / 5 / 3
Регистрация: 28.03.2010
Сообщений: 146
1

Конструкторы классов

08.04.2010, 20:16. Показов 2447. Ответов 15
Метки нет (Все метки)

Схематично:
C++
1
2
3
4
5
6
7
8
9
10
11
class A
{public:
A() {}//конструктор А
. . .   //методы класса А
}
 
class B: public A
{public:
B() {}//конструктор B
. . .   //методы класса B
}
На девятой строчке, в конструкторе класса В вылазит ошибка про класс А:
no appropriate default constructor available

Подскажите, пожалуйста, где ошибка?..
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2010, 20:16
Ответы с готовыми решениями:

Конструкторы классов
Помогите разобраться с классами, не пойму как мне сделать правильно конструкторы класса...

Наследование классов и конструкторы
#include <stdio.h> #include <conio.h> class form { public: ...

Конструкторы классов в неявно подключенных DLL
Добрый день, господа программисты! Столкнулся с парой проблем при работе с DLL При написании...

Классы, конструкторы, деструкторы, методы классов
Доброго времени суток , Господа программисты. :) Очень нужна Ваша помощь. Написал программу, но...

15
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
08.04.2010, 20:29 2
поставь точку с запятой после объявления класов A и B
0
5 / 5 / 3
Регистрация: 28.03.2010
Сообщений: 146
08.04.2010, 20:37  [ТС] 3
C++
1
2
3
4
5
6
7
8
9
10
11
class A
{public:
A() {}//конструктор А
. . .   //методы класса А
};
 
class B: public A
{public:
B() {}//конструктор B
. . .   //методы класса B
}
извиняюсь за неточность. точка с запятой стоит... я как то неправильно использую конструкторы... вообще необходимо создать класс А с конструктором и класс В, потомок класса А без конструктора. Я пробовал:

C++
1
2
3
4
5
6
7
8
9
10
class A
{public:
A() {}//конструктор А
. . .   //методы класса А
};
 
class B: public A
{public:
. . .   //методы класса B
}
И при использовании он запрашивает в качестве аргумента (const B &), но я так и не смог понять чего он от меня хочет и дописал к В конструктор. В итоге имею другую ошибку(( ХЕЛП!!!
0
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
08.04.2010, 20:40 4
не понимаю, в чем проблема. Вот класс с конструктором и без. Никаких ошибок быть не должно:
C++
1
2
3
4
5
6
7
8
9
class A
{
public:
A(){}
};
 
class B: public A
{
};
0
5 / 5 / 3
Регистрация: 28.03.2010
Сообщений: 146
08.04.2010, 20:40  [ТС] 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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Element::Element(short id)
{switch(id)
    {
    case 12:
        {
        Name="Магний";
        AN=12;
        AM=24.305;
        EO=1.31;
        TP=648.8;
        TK=1090;
        P=1.738;
        break;}
    case 35:
        {
        Name="Бром";
        AN=35;
        AM=79.904;
        EO=2.96;
        TP=-7.2;
        TK=58.78;
        P=3.119;
        break;}
    case 24:
        {
        Name="Хром";
        AN=24;
        AM=51.996;
        EO=1.66;
        TP=1857;
        TK=2672;
        P=7.19;
        }
    default:
        {
        Name="-";
        AN=0;
        AM=0;
        EO=0;
        TP=0;
        TK=0;
        P=0;
        }
    }
}
И, кстати, ошибки не в объявлении классов, а при вызове класса В.
0
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
08.04.2010, 20:42 6
SphiNkSs, ты, блин, можешь сюда код с классами целиком дать, чтобы не писать код заранее ошибочный, потом добавлять что-то? Копируй сюда код и сообщение об ошибке.
0
Унылый школьник
126 / 60 / 10
Регистрация: 06.11.2009
Сообщений: 353
08.04.2010, 20:42 7
У меня тоже спокойно компилятся оба варианта... Скиньте весь код на всякий случай
0
Эксперт С++
5027 / 2606 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
08.04.2010, 20:42 8
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>
 
class A
{
    public:
            A() 
            {
            }
};
 
class B : public A
{
    public:
            void Hello() 
            { 
                std::cout << "Hello" << std::endl; 
            }
};
 
int main()
{
    B b;
    b.Hello();
}
Компиляция и результат работы программы:
Код
>mingw32-make
g++    -c -o \main.o \main.cpp
g++   \main.o  -o \app

>app

Hello
Ни одной ошибки и ни одного предупреждения
0
Ignat
08.04.2010, 20:44
  #9

Не по теме:


Я поражаюсь возникают такие примитивные вопросы, будто бы у людей литературы по C++ нет...

0
fasked
08.04.2010, 20:44
  #10

Не по теме:

Genius Ignat, бывает ступор иногда

0
Унылый школьник
126 / 60 / 10
Регистрация: 06.11.2009
Сообщений: 353
08.04.2010, 20:46 11
Все ясно. Нужно в инициализации конструктора B писать конструктор A с необходимыми параметрами:
C++
1
2
3
4
5
6
7
8
9
10
11
class A
{
public:
    A(int a) {} //конструктор А
};
 
class B: public A
{
public:
    B(): A(5) {}//конструктор B, инициализируемый конструктором A
};
1
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
08.04.2010, 20:47 12
SphiNkSs, в следующий раз пиши вопрос по-нормальному и давай все данные, а не обрывками и с ошибками.
0
5 / 5 / 3
Регистрация: 28.03.2010
Сообщений: 146
08.04.2010, 20:53  [ТС] 13
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <locale>
 
class Element
{
private:
char *Name;
int AN;
double AM,EO,TP,TK,P;
 
public:
Element::Element(short id)
{switch(id)
    {
    case 12:
        {
        Name="Магний";
        AN=12;
        AM=24.305;
        EO=1.31;
        TP=648.8;
        TK=1090;
        P=1.738;
        break;}
    case 35:
        {
        Name="Бром";
        AN=35;
        AM=79.904;
        EO=2.96;
        TP=-7.2;
        TK=58.78;
        P=3.119;
        break;}
    case 24:
        {
        Name="Хром";
        AN=24;
        AM=51.996;
        EO=1.66;
        TP=1857;
        TK=2672;
        P=7.19;
        }
    default:
        {
        Name="-";
        AN=0;
        AM=0;
        EO=0;
        TP=0;
        TK=0;
        P=0;
        }
    }
}
 
 
 
void Set(char *NameT, int ANT, double AMT, double EOT, double TmpPT, double TmpKT, double TPT, double PT)
    {
    Name=NameT;
    AN=ANT;
    AM=AMT;
    EO=EOT;
    TP=TmpPT;
    TK=TmpKT;
    P=PT;
    }
void Show()
    {
    printf("Элемент: %s\n",Name);
    printf("Атомный номер: %d\n",AN);
    printf("Атомная масса: %.2f а.е.м.\n",AM);
    printf("Электроотрицательность: %.2f\n",EO);
    printf("Температура плавления: %.1f C\n",TP);
    printf("Температура кипения: %.1f C\n",TK);
    printf("Плотность: %.2f г/(см^3)\n",P);
    }
};
 
class MIAE: public Element //MoreInfoAboutElement
{
public:
char *elem_type;
 
void SetType(char *elem_typeT)
    {
    elem_type=elem_typeT;
    }
 
void MoreShow()
    {
    printf("Тип элемента: %s\n",elem_type);
    Show();
    }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"Russian");
Element E(24);
MIAE E1;//как аргумент требует (const MIAE &) и я не знаю что туда вписать, соответственно здесь же ошибка вылазит
E.Set("Wata",1,1.1,1.2,1.3,1.4,1.6,1.7);
E1.SetType("Металл");
E1.MoreShow();
E.Show();
getch();
return 0;
}
ошибка:
error C2512: 'MIAE' : no appropriate default constructor available

ЗЫ литература есть, там такой случай не рассматривается
0
1259 / 797 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
08.04.2010, 21:01 14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class MIAE: public Element //MoreInfoAboutElement
{
public:
MIAE(): Element(0){}         
char *elem_type;
 
void SetType(char *elem_typeT)
        {
        elem_type=elem_typeT;
        }
 
void MoreShow()
        {
        printf("Тип элемента: %s\n",elem_type);
        Show();
        }
};
Добавлено через 1 минуту
по хорошему в базовом классе надо прописать конструктор по умолчанию.
1
5 / 5 / 3
Регистрация: 28.03.2010
Сообщений: 146
08.04.2010, 21:02  [ТС] 15
Всем спс))) Проблема решена. Тему можно закрывать.
0
1259 / 797 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
08.04.2010, 21:02 16
по хорошему в базовом классе надо прописать конструктор по умолчанию.
И тогда то что я добавил можно стереть.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2010, 21:02

Еще немного про конструкторы обобщенных классов
Пытаюсь проинициализировать объект обобщенного класса, параметром которого может выступать ссылка....

Как создавать конструкторы, что бы использовать переменные из любых классов?
В общем пишу программку, суть в том , что я должен научиться спокойно использовать переменные из...

Что такое конструкторы классов, копирования, по умолчанию с запретом неявного приведения аргументов?
Что такое конструкторы классов, конструкторы копирования, конструкторы по умолчанию и конструкторы...

Разработать иерархию классов, демонстрирующее работу с коллекцией объектов разных классов
Задание: Разработать в соответствии с индивидуальным заданием иерархию классов и приложение,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru