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

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

Восстановить пароль Регистрация
 
SphiNkSs
5 / 5 / 1
Регистрация: 28.03.2010
Сообщений: 143
08.04.2010, 20:16     Конструкторы классов #1
Схематично:
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

Подскажите, пожалуйста, где ошибка?..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2010, 20:16     Конструкторы классов
Посмотрите здесь:

Конструкторы C++
Конструкторы C++
C++ Классы, конструкторы, деструкторы, методы классов
Конструкторы классов C++
Конструкторы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
08.04.2010, 20:29     Конструкторы классов #2
поставь точку с запятой после объявления класов A и B
SphiNkSs
5 / 5 / 1
Регистрация: 28.03.2010
Сообщений: 143
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 &), но я так и не смог понять чего он от меня хочет и дописал к В конструктор. В итоге имею другую ошибку(( ХЕЛП!!!
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
08.04.2010, 20:40     Конструкторы классов #4
не понимаю, в чем проблема. Вот класс с конструктором и без. Никаких ошибок быть не должно:
C++
1
2
3
4
5
6
7
8
9
class A
{
public:
A(){}
};
 
class B: public A
{
};
SphiNkSs
5 / 5 / 1
Регистрация: 28.03.2010
Сообщений: 143
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;
        }
    }
}
И, кстати, ошибки не в объявлении классов, а при вызове класса В.
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
08.04.2010, 20:42     Конструкторы классов #6
SphiNkSs, ты, блин, можешь сюда код с классами целиком дать, чтобы не писать код заранее ошибочный, потом добавлять что-то? Копируй сюда код и сообщение об ошибке.
Demihalf
Унылый школьник
 Аватар для Demihalf
126 / 60 / 3
Регистрация: 06.11.2009
Сообщений: 354
08.04.2010, 20:42     Конструкторы классов #7
У меня тоже спокойно компилятся оба варианта... Скиньте весь код на всякий случай
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 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
Ни одной ошибки и ни одного предупреждения
Genius Ignat
08.04.2010, 20:44
  #9

Не по теме:


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

fasked
08.04.2010, 20:44
  #10

Не по теме:

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

Demihalf
Унылый школьник
 Аватар для Demihalf
126 / 60 / 3
Регистрация: 06.11.2009
Сообщений: 354
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
};
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
08.04.2010, 20:47     Конструкторы классов #12
SphiNkSs, в следующий раз пиши вопрос по-нормальному и давай все данные, а не обрывками и с ошибками.
SphiNkSs
5 / 5 / 1
Регистрация: 28.03.2010
Сообщений: 143
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

ЗЫ литература есть, там такой случай не рассматривается
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
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 минуту
по хорошему в базовом классе надо прописать конструктор по умолчанию.
SphiNkSs
5 / 5 / 1
Регистрация: 28.03.2010
Сообщений: 143
08.04.2010, 21:02  [ТС]     Конструкторы классов #15
Всем спс))) Проблема решена. Тему можно закрывать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2010, 21:02     Конструкторы классов
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
08.04.2010, 21:02     Конструкторы классов #16
по хорошему в базовом классе надо прописать конструктор по умолчанию.
И тогда то что я добавил можно стереть.
Yandex
Объявления
08.04.2010, 21:02     Конструкторы классов
Ответ Создать тему
Опции темы

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