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

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

Войти
Регистрация
Восстановить пароль
 
Викдон
67 / 67 / 4
Регистрация: 21.11.2008
Сообщений: 226
#1

Классы - C++

21.02.2009, 20:39. Просмотров 848. Ответов 14
Метки нет (Все метки)

У меня возник вопрос!
вот класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Mnojestvo{   //Класс Множество
 public:
     Mnojestvo(int n){FMas=new char [n];} //Конструктор для итогого множества С
     Mnojestvo(int n,char*ptr); 
     Mnojestvo Union(Mnojestvo P); //Метод "Объединение"
     Mnojestvo Cross(Mnojestvo P);// Метод "Пересечение"
     void Insert_Elem(); //Метод "Добавление элемента"
     ~Mnojestvo(){delete FMas;}
   // методы
 private:
    char*FMas; //Указатель на массив символов
    int count; //Число элементов в множестве
};
а вот объявление объекта:
C++
1
Mnojestvo A;
Могу я в методе класса удалить указатель FFam и заново выделить под него место?

Вот так:
C++
1
2
delete FMas;     
FMas = new char (count+1);
но выводится ошибка))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2009, 20:39     Классы
Посмотрите здесь:

Классы!!! C++
C++ Классы в C++
классы C++
Классы C++
C++ классы
C++ Классы в С++
C++ C++ Классы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
21.02.2009, 20:43     Классы #2
Цитата Сообщение от Р’РёРєРґРѕРЅ Посмотреть сообщение
а вот объявление объекта:
Mnojestvo A;
у тебя конструктор чкакието там параметры принимать должен, а ты ему ничего не переданшь
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.02.2009, 20:46     Классы #3
у тебя конструктор чкакието там параметры принимать должен, а ты ему ничего не переданшь
ага (вызывается конструктор по умолчанию и память не выделяется), к тому же...
Код
delete FMas;
а попробуй память из под массива по-правильному удалить.
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
21.02.2009, 20:47     Классы #4
Цитата Сообщение от Викдон Посмотреть сообщение
delete FMas;
FMas=new char (count+1);
можешь, вот только не пойму что значит
Цитата Сообщение от Викдон Посмотреть сообщение
(count+1)
Добавлено через 1 минуту 29 секунд
если это массив то надо "[]" испльзовать
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.02.2009, 20:49     Классы #5
Цитата Сообщение от Бартимеус Посмотреть сообщение
можешь, вот только не пойму что значит


Добавлено через 1 минуту 29 секунд
если это массив то надо "[]" испльзовать
Я подумал, что опечатался человек )) в коструторе правильно написал, а тут так жестоко с круглыми скобками.
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
21.02.2009, 20:53     Классы #6
Цитата Сообщение от Vourhey Посмотреть сообщение
вызывается конструктор по умолчанию
разве вызывается конструктор по умолчанию если есть "свой"? По моему его надо явно определять)
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.02.2009, 20:56     Классы #7
Бартимеус, конструктор по умолчанию есть всегда.
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
21.02.2009, 21:18     Классы #8
А я тебе и не говорю, что его нет) я тебе говорю что программа выдает ошибку компиляции если ты его не объявляешь явно если есть свой конструктор она пытается его использовать, а этого не получается

Добавлено через 3 минуты 3 секунды
вот объясни мне почему такой код работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <conio.h>
 
using namespace std;
 
class temp
{
    public:
        temp(int y) {x = y;};
        int x;  
};
 
int main()
{
    temp first(6);
    cout<<first.x<<endl;
    _getch();
    return 0;   
}
а такой нет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <conio.h>
 
using namespace std;
 
class temp
{
    public:
        temp(int y) {x = y;};
        int x;  
};
 
int main()
{
    temp first;
    cout<<first.x<<endl;
    _getch();
    return 0;   
}
?
CheshireCat
Эксперт С++
2891 / 1240 / 78
Регистрация: 27.05.2008
Сообщений: 3,327
21.02.2009, 21:55     Классы #9
Цитата Сообщение от Vourhey Посмотреть сообщение
Бартимеус, конструктор по умолчанию есть всегда.
За исключением: если объявлен хотя бы один пользовательский конструктор, то генерация implicitly declared конструктора по умолчанию подавляется - Стандарт, 12.1/5.
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
21.02.2009, 21:58     Классы #10
вот и я к томуже если объявил свой конструктор и хочешь использовать стандартный(без параметров то есть) то надо не поленится и ЯВНО объявить конструктор идентичный стандартному
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.02.2009, 22:06     Классы #11
Но у человека компилится же, насколько я понял. Значит, компилер генерит конструктор по умолчанию. А ошибка, как я понял именно на delete и new в методе. Или он плохо объяснил, где у него ошибка.

Добавлено через 4 минуты 6 секунд
Стандарт, 12.1/5.
отстань с этим. Стандартов не существует Есть компилятор.
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
21.02.2009, 22:19     Классы #12
Ворхей, я привел тебе пример и пользовался я не каким-нибудь левым компилятором, а gcc. не запускается)
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.02.2009, 22:24     Классы #13
Я не говорю, что у тебя левый компилер, я сам gcc всю жизнь использую и не спорю с твоим примером. Я предполагаю, почему может работать у человека прога. А может только если генерируется конструктор по умолчанию.
Викдон
67 / 67 / 4
Регистрация: 21.11.2008
Сообщений: 226
21.02.2009, 22:36  [ТС]     Классы #14
Спасибо) я тут не дописал Mnojestvo A(два параметра).. А ошибка была в том что я написал при выделении памяти указателю круглые скобки..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2009, 22:42     Классы
Еще ссылки по теме:

Классы?! C++
Классы C++
C++ классы с++
Классы C++ C++
Классы в С++ C++

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

Или воспользуйтесь поиском по форуму:
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.02.2009, 22:42     Классы #15
Викдон, память из под массива не забывай удалять используя [].
Тема закрыта.

P. S. да, и еще не ошибайся так больше , а то я подумал, что у тебя как у моего знакомого компилер (надо спросить, кстати, как называется), генерит все стандартные конструкторы сам, а потом вызывает их вложенным путем: сначал свой внутренний инциализатор, а потом уже написанный пользователем. Контроль качества, блин... Жуть, короче.
Yandex
Объявления
21.02.2009, 22:42     Классы
Закрытая тема Создать тему
Опции темы

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