Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2013, 17:04   #1
charlotte_9409
Новичок
Джуниор
 
Регистрация: 03.05.2013
Сообщений: 2
По умолчанию Недоделанная программа: конструкторы

Задание:Постpоить класс для работы с окружностями. Класс должен включать следующие поля: коор-динаты центра, радиус, цвет заливки.
Класс должен обеспечивать пpостейшие методы для pаботы с полями класса: вычисление дли-ны окружности, вычисление площади, вывод значений.
Программа:

Код:
#include <iostream>
using namespace std;
class Circle
{
	int r;
	int x;
	int y;
	char * colour;
	public:

  Circle(int ir, int ix, int iy, char * ic);//с параметрами
  Circle();// без параметров
  Circle(Circle &);//копирование 
  ~Circle();//диструктор
  void Print();//вывод
};

Circle::Circle(int ir, int ix, int iy, char * ic)
{x=ix;
 y=iy;
 r=ir;
 colour=new char[strlen(ic)+1];
 strcpy(colour,ic);
}
void Circle::Print()
{cout<<"x="<<x<<" y="<<y<<" r="<<r<<" colour="<<colour<<endl;
}
Circle::Circle()
{x=0;
 y=0;
 r=0;
 colour=new char[1];
 colour[0]='\0';
}
Circle::~Circle()
{delete colour;
}
Circle::Circle(Circle & c)
{x=c.x;
 y=c.y;
 r=c.r;
 colour=new char[strlen(c.colour)+1];
 strcpy(colour,c.colour);
}

void main()
{ system("cls");
  setlocale(LC_ALL,".ACP");
  cout<<"Текст на русском языке"<<endl;
  int temp;
  cout<<"Введите длину радиуса";
  cin>>temp;
  Circle my_Circle(2,3,temp,"red");
  my_Circle.Print();
  Circle c2;
  c2.Print();

  /*Circle my_Circle2(my_Circle);
  my_Circle2.Print();
  Circle qwerty (ppp);
  qwerty.Print();*/
}
Помогите пожалуйста, не работает, ошибки

Последний раз редактировалось ACE Valery; 03.05.2013 в 18:48.
charlotte_9409 вне форума Ответить с цитированием
Старый 03.05.2013, 19:23   #2
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Какие ошибки? Тут не ясновидящие
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 05.05.2013, 14:10   #3
charlotte_9409
Новичок
Джуниор
 
Регистрация: 03.05.2013
Сообщений: 2
По умолчанию

при запуске вылетает программа
charlotte_9409 вне форума Ответить с цитированием
Старый 05.05.2013, 15:04   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Оператору new всегда должен соответствовать оператор delete.
Оператору new[] всегда должен соответствовать оператор delete[].
Не путайте.
Код:
Circle::~Circle()
{delete[] colour;
}
Abstraction вне форума Ответить с цитированием
Старый 06.05.2013, 15:12   #5
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Я могу ошибиться, но случайно не по умолчанию ли поля задаются как privete и ты к этим полям пытаешься обратиться на прямую?!
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Старый 06.05.2013, 17:49   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Я могу ошибиться, но случайно не по умолчанию ли поля задаются как private и ты к этим полям пытаешься обратиться напрямую?!
Обращения к закрытым членам класса вне методов самого класса в приведённом коде нет.
Кроме того, нарушение уровня доступа - это ошибка компиляции, а не выполнения.
Abstraction вне форума Ответить с цитированием
Старый 07.05.2013, 17:04   #7
MegaBEavER
 
Регистрация: 07.05.2013
Сообщений: 4
По умолчанию

Скопировал, скомпилил, работает.
Надеюсь, ты же пробовал ставить в конце main что-нить типа system("pause"); чтобы после исполнения программа не закрывалась и давала увидеть тебе ответ?)
MegaBEavER вне форума Ответить с цитированием
Старый 07.05.2013, 17:23   #8
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Скопировал, скомпилил, работает.
...не показатель без указания точной версии компилятора (в смысле, не соответствующий стандарту код может всё же оказаться корректным для некоторых компиляторов). Насколько помню, по крайней мере некоторые версии компилятора в MS Visual Studio позволяли такой код:
Код:
char* array = new char[100];
delete array;
Но правильным он от этого не становится.

Последний раз редактировалось Abstraction; 08.05.2013 в 15:42. Причина: Опечатка (см. следующее сообщение).
Abstraction вне форума Ответить с цитированием
Старый 07.05.2013, 18:07   #9
MegaBEavER
 
Регистрация: 07.05.2013
Сообщений: 4
По умолчанию

MS VS2010, Microsoft C/C++ Compiler 16.0.30319.1
В вашем примере, наверное, имелось ввиду delete array;?
Компилятор такой код утраивает, да:
Код:
char* array = new char[100];
delete array;

Последний раз редактировалось MegaBEavER; 07.05.2013 в 18:14.
MegaBEavER вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конструкторы классов Стремящийся Общие вопросы C/C++ 3 17.04.2012 09:39
Конструкторы Gen_r_questions PHP 4 05.04.2011 12:38
Конструкторы и деструкторы @arkadii Общие вопросы C/C++ 2 10.11.2010 17:40
конструкторы zhenya.ya Помощь студентам 3 16.09.2010 09:34
Конструкторы Лорд Общие вопросы C/C++ 1 21.12.2008 18:35