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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
petrovich1
0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
#1

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

16.12.2011, 22:18. Просмотров 1254. Ответов 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''


чего он ругается?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2011, 22:18     Нужно объект типа класс проинициализировать с помощью перегруженного конструктора Class::Class( bool a )
Посмотрите здесь:

enum и class как составляющие другого class C++
C++ Переопределение типа class
C++ Что это bool operator== (const CLASS&) const;
Работа с class ами. Заполнение дин. массива типа class C++
vector<[class]> in class и перегрузка (ostream) C++
C++ public class && static class
C++ Create a programm that creates an object of created class Time and tests the member functions of class
Вложенный (внутренний) класс (inner class) C++
C++ Реализация перегруженного конструктора
C++ Объяснить причины ошибки "Extra qualification 'CLASS CONSTRUCTOR' and 'CLASS' has incomplete type"
Обяснение конструктора class HugeInteger C++
Используйте объект orange типа Tfruit для инициализации объекта grapefruit с помощью конструктора копирования C++

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

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

Можно создавать также объекты динамически(выделять память в куче):
CMyClass* class_item = new CMyClass(TRUE);
Но при этом память надо освобождать, когда объект не нужен, вызовом:
delete class_item;
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
18.12.2011, 18:53     Нужно объект типа класс проинициализировать с помощью перегруженного конструктора Class::Class( bool a ) #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 уважением,
Владимир
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
18.12.2011, 23:21     Нужно объект типа класс проинициализировать с помощью перегруженного конструктора Class::Class( bool a ) #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;
}
Удачи,
Владимир
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
18.12.2011, 23:23     Нужно объект типа класс проинициализировать с помощью перегруженного конструктора Class::Class( bool a ) #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;
}
comm
Сообщений: n/a
16.01.2012, 22:24     Нужно объект типа класс проинициализировать с помощью перегруженного конструктора Class::Class( bool a ) #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 ) {
   ....
  }
}
инициализация агрегированных данных в конструкторе делается также как и вызов конструктора базового класса, все данные должны инициализироваться в том же порядке как и объявлялись
Yandex
Объявления
16.01.2012, 22:24     Нужно объект типа класс проинициализировать с помощью перегруженного конструктора Class::Class( bool a )
Ответ Создать тему
Опции темы

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