Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
petrovich1
0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
#1

Нужно объект типа класс проинициализировать с помощью перегруженного конструктора Class::Class( bool a )

16.12.2011, 22:18. Просмотров 1336. Ответов 5
Метки нет (Все метки)

Плиз помогите. Не знал, что я такой чайник.)

Итак:
есть два класса:

CMyClass.h
CMyClass.cpp

и

CMyClassDlg.h
CMyClassDlg.cpp

я перегружаю конструктор класса Class
C++
1
2
3
4
5
6
CMyClass::CMyClass()
{}
CMyClass::CMyClass( bool a )
{
if( a ) ... 
}
в классе ClassDlg я объявляю объект типа класс и хочу его проинициализировать с помощью перегруженного конструктора Class::Class( bool a )
как это сделать?

я делаю так:
в файле MyClassDlg.h объявляю
C++
1
MyClass class_item;
в файле MyClassDlg.cpp пишу:
C++
1
class_item = CMyClass(TRUE);
он пишет:
error C2582: ''operator ='' function is unavailable in ''CMyClass''


чего он ругается?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2011, 22:18
Ответы с готовыми решениями:

Работа с class ами. Заполнение дин. массива типа class
Всем доброго времени суток! Это моя первая тема на этом сайте, поэтому если...

Разъясните код пжлст(выдает ошибку:cannot convert from 'class std::list<class c_bullet *,class std::allocator<class c_bullet *> >::iterator' to 'int')
Есть такие строки: std::list&lt;c_bullet*&gt; Bullets; ... for(auto i =...

Используйте объект orange типа Tfruit для инициализации объекта grapefruit с помощью конструктора копирования
Есть класс с именем Tfruit и объект orange типа Tfruit. Используйте orange для...

Обяснение конструктора class HugeInteger
#include &lt;iostream.h&gt; #include &lt;string.h&gt; class HugeInt{ friend ostream...

Create a programm that creates an object of created class Time and tests the member functions of class
Time Class Create a class called Time that might be used to represent...

5
Dinosauro
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 1
17.12.2011, 20:43 #2
Если память под объект выделяется в стеке объект нужно инициализировать при определении (определение MyClass class_item; инициализируется конструктором по умолчанию - без параметров), если нужно вызвать прегруженный конструктор нужно написать:
CMyClass class_item(TRUE);
При этом объект будет автоматически освобожден при выходе из области видимости class_item.

Можно создавать также объекты динамически(выделять память в куче):
CMyClass* class_item = new CMyClass(TRUE);
Но при этом память надо освобождать, когда объект не нужен, вызовом:
delete class_item;
0
boombastik
7 / 7 / 11
Регистрация: 13.02.2007
Сообщений: 1,255
18.12.2011, 18:53 #3
по-моему там все просто.

MyClassDlg.h
C++
1
2
3
4
5
6
7
8
9
10
class CMyClassDlg
{
public:
    CMyClassDlg();
    ...
 
public:
    CMyClass m_A;
    CMyClass m_B;
}
MyClassDlg.cpp
C++
1
2
3
4
5
CMyClassDlg::CMyClassDlg():
    m_A(TRUE),
    m_B(FALSE)
{
}
В синтаксисе не совсем уверен, когда придут домой - гляну и уточню.

C уважением,
Владимир
0
boombastik
7 / 7 / 11
Регистрация: 13.02.2007
Сообщений: 1,255
18.12.2011, 23:21 #4
Так и есть, приведенный выше синтаксис верный (помню ведь еще чего-то ).

При использовании указателей обычно инициализация указателей (создание экземпляров классов) проводится в теле конструктора, а их удаление в деструкторе. Например,

-= MyClassDlg.h =-
C++
1
2
3
4
5
6
7
8
9
10
11
class CMyClassDlg
{
public:
    CMyClassDlg();
    ~CMyClassDlg();
    ...
 
public:
    CMyClass* m_pA;
    CMyClass* m_pB;
}
-= MyClassDlg.cpp =-
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
CMyClassDlg::CMyClassDlg()
{
    m_pA = new CMyClass(TRUE);
    m_pB = new CMyClass(FALSE);
}
 
CMyClassDlg::~CMyClassDlg()
{
    if (!m_pA)
        delete m_pA;
    if (!m_pB)
        delete m_pB;
}
Удачи,
Владимир
0
boombastik
7 / 7 / 11
Регистрация: 13.02.2007
Сообщений: 1,255
18.12.2011, 23:23 #5
ой!
C++
1
2
3
4
5
6
7
CMyClassDlg::~CMyClassDlg()
{
    if (m_pA)
        delete m_pA;
    if (m_pB)
        delete m_pB;
}
а еще лучше
C++
1
2
3
4
5
6
7
CMyClassDlg::~CMyClassDlg()
{
    if (m_pA != NULL)
        delete m_pA;
    if (m_pB != NULL)
        delete m_pB;
}
0
comm
16.01.2012, 22:24 #6
C++
1
2
3
4
5
6
7
8
9
10
11
class A {
  A( bool sign) {
   ...
  } 
}
class B {
  A m_a;
  B() : m_a( true ) {
   ....
  }
}
инициализация агрегированных данных в конструкторе делается также как и вызов конструктора базового класса, все данные должны инициализироваться в том же порядке как и объявлялись
16.01.2012, 22:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2012, 22:24

enum и class как составляющие другого class
Как организовать ввод enuma с клавиатуры (51-я строка)? Как прикрепить класс...

vector<[class]> in class и перегрузка (ostream)
Доброе всем время суток ) столкнулся с проблемой Есть у меня несколько...

Что это bool operator== (const CLASS&) const;
Что это? class CLASS { public: bool operator== (const CLASS&amp;)...


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

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

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