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

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

Войти
Регистрация
Восстановить пароль
 
 
SphiNkSs
5 / 5 / 1
Регистрация: 28.03.2010
Сообщений: 143
#1

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

08.04.2010, 20:16. Просмотров 1776. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2010, 20:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструкторы классов (C++):

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

Наследование классов и конструкторы - C++
#include <stdio.h> #include <conio.h> class form { public: form(){printf("form::form()\n");}; ...

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

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

Еще немного про конструкторы обобщенных классов - C++
Пытаюсь проинициализировать объект обобщенного класса, параметром которого может выступать ссылка. #include <iostream> ...

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

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

Не по теме:


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

0
fasked
08.04.2010, 20:44
  #10

Не по теме:

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

0
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
};
1
Vourhey
Почетный модератор
6481 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
08.04.2010, 20:47 #12
SphiNkSs, в следующий раз пиши вопрос по-нормальному и давай все данные, а не обрывками и с ошибками.
0
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

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

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

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

Вынести методы из классов Panel и PictureBox (явная реализация методов базовых абстрактных классов) - C++
Тема: Множественное наследование. Явная реализация методов базовых абстрактных классов. Как вынести методы из классов Panel и...

Реализация отношения классов типа двунаправленная ассоциация, UML, порядок объявления классов, неполный класс - C++
Доброго времени суток! Осваивая UML, решил реализовать отношение двунаправленной ассоциации по диаграмме: У одного владельца...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.04.2010, 21:02
Ответ Создать тему
Опции темы

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