Вопрос № 120391: Здравствуйте!
Столкнулся с такой проблемой. Мне нужен класс, который содердит динамический массив экземпляров другого класса. Я написал это дело, но почему-то не работает. Т.е. понятно почему - с памятью криво работаю или что-то где-то неправильн...Вопрос № 120431: Здраствуйте. Помогите пожалуста, мне нужно дописать програму на С++,
которая создает клас сегмент, но у меня почемуто возникает такая
ошыбка:'sqrt' : ambiguous call to overloaded function. Вот код прогаммы:
Point.h
#ifndef _POINT_H_...Вопрос № 120443: Здравствуйте. Есть все та же программа (пишется в MS Visual Studio, приведена в приложении). На нее нужно добавить командную строку (что-то вроде edit'а в Delphi), которая будет располагаться в нижней части окна. Как это сделать используя только WinA...Вопрос № 120463: Очень срочно нужна помощь!
С++
1) Написать функцию, которая в заданной строке считает количество букв, цифр и других знаков. Все три значения вернуть из функции.
2) В заданной строке отсортировать символы по алфавиту (написать функцию)<br...Вопрос № 120480: Здравствуйте!
Помогите, может кто делал что то подобное?
1) Составить программу реализующую трухмерное преобразование с фигурой:
Фигура - Октаэдр
Преобразование - Изменение масштаба по осям X, Y, Z и общее масштабирование по трём...Вопрос № 120516: Здравствуйте! Помогите решить задачу. Условие: Дана строка и подстрока,найти сколько раз повторяется строка в подстроке и вывести на экран количество повторов. Заранее большое спасибо!...
Вопрос № 120.391
Здравствуйте!
Столкнулся с такой проблемой. Мне нужен класс, который содердит динамический массив экземпляров другого класса. Я написал это дело, но почему-то не работает. Т.е. понятно почему - с памятью криво работаю или что-то где-то неправильно написал.
Для проверки написал 2 левых класса, чисто для тестироания того, что мне надо - добавления экземпляра класса в динамический массив.
В приложении 2 класса:
Класс В, который соержит динамический массив чисел. Это просто так, для примера. У меня реальный класс то же самое содержит. Для него реализованы конструкторы, деструкторы, копирующий конструктор, вроде все нормально.
Класс А. Это класс, который должен содержать в себе массив классов В. Добавляются они в него методом add. Я передаю объект по значению (для того и написал конструктор копирования в классе В)
В обоих класах содержатся функции, который освобождают память, если количество элементов массивов болше нуля.
Интересный прикол. Если класс А заставить работать не с экземпляром класса В, а просо с числами, например double, то все проходит, все нормально. Значит я, наверное, что-то в классе В намудрил.
Замечание. std::vector, CArray и т.п. не используется, потому что мне нужна максимальная независимость от библиотек. В идеале, должно зависеть только от функций ввода-вывода и математической. Потому что возможно надо будет переносить под юникс. Я там не особенно шарю, так что чем меньше зависимостей, тем лучше.
Отвечает: Алексей Демаков
Здравствуйте, Константин Сергеевич Мирин!
При вызове из main() конструктора класса B с параметром: B b1(3) происходит вызов B::Initialize
и B::free(). Беда в том, что поле n в конструкторе с параметром не инициализируется. Поэтому происходит попытка освобождения памяти d.
Вторая проблема: B::B( B& b ) в последней строке освобождает память, которая получена от GetData(). А это внутренний буфер другого объекта. В результате состояние другого объекта портится.
Третья проблема: в методе A::add(B num) есть строка
temp[this->n] = num;
которая копирует объект. Но оператора присваивания у класса B нет. Поэтому внутренний буфер при копировании не дублируется, а разделяется между объектами.
Честно говоря, смысла в создании двух массивов в этом методе мало. Проще создать первый массив, а потом просто присвоить указатель на него полю d.
Стандартная библиотека С++ - она и в Африке работает :) Правильнее ей пользоваться, чем изобретать велосипед.
Ответ отправил: Алексей Демаков (статус: Студент)
Ответ отправлен: 27.01.2008, 23:05 Оценка за ответ: 5 Комментарий оценки: Спасибо большое!
Думаю, ошибка была как раз из-за отсутствия перегрузки оператора присваивания.
Остальное, наверное, вылезло бы позже.
Вопрос № 120.431
Здраствуйте. Помогите пожалуста, мне нужно дописать програму на С++,
которая создает клас сегмент, но у меня почемуто возникает такая
ошыбка:'sqrt' : ambiguous call to overloaded function. Вот код прогаммы:
Point.h
#ifndef _POINT_H_
#define _POINT_H_
#include <iostream>
using namespace std;
//*******************************************
// Every point posesses its unique ID.
// In debug mode both constructor and destructor
// report the ID and the coordinates
// of a point created or resp. deleted
// Developed by Sendel ~:)
// Version 1.0
//*******************************************
class Point
{
private:
static int freeID;
int pointID;
double _x;
double _y;
public:
Point(double x=0, double y=0);
Point(const Point &);
~Point();
Point& operator=(const Point &);
double& x();
double& y();
const double& x() const;
const double& y()const;
const int getID() const;
static int amount() ;
};
ostream& operator<<(ostream&, const Point&);
const Point operator+ (const Point & , const Point & );
Point& operator+=(Point &, const Point&);
bool operator==(const Point & , const Point &);
bool operator!=(const Point & , const Point &);
#endif
Segment.h
#include "Point.h"
// Developed by Sendel(Presi4 Olexandr) ~:)
// Version 1.0
class Segment
{
private:
static int _freeID;
const int _myId;
Point _a,_b;
public:
Segment(const double x1=0, const double y1=0,
const double x2=1, const double y2=0);
Segment(const Point &, const Point &);
Segment(const Segment&);
~Segment();
Segment& operator=(const Segment&);
const Point& start() const;
const Point& end() const;
double length () const;
double distance (const Point&) const;
const int getID() const;
};
ostream& operator<<(ostream &, const Segment &);
main.cpp
#include <iostream>
using namespace std;
#include "Segment.h"
#include "Point.h"
int main()
{
Point q(7,1), w(3,4),r(w);
Segment a,b(-1,0,0,1),c(b),d(q,w);
Segment s(c.start(),d.end());
cout<<s<<endl;
a=b=d;
cout<<a<<" "<<b<<" "<<d<<endl;
cout<<b.length()<<" length of "<<b<<endl;
cout<<b.distance(w)<<" distance from "<<b<<" to "<<w<<endl;
Segment::Segment(const Point &start, const Point &end):
_myId(_freeID++)
{
_a=start;
_b=end;
cout<<*this<<" created by 2 parameters constructor"<<endl;
}
Segment::Segment(const Segment &s):
_myId(_freeID++)
{
_a=s._a;
_b=s._b;
cout<<*this<<" created by copy parameters constructor"<<endl;
}
Segment::~Segment()
{
cout<<*this<<" deleted by destructor"<<endl;
}
Компилятор не может решить, какая из них вызывается. Вставьте в вызов явное преобразование типа аргумента. sqrt( (double)(...) )
Ответ отправил: Алексей Демаков (статус: Студент)
Ответ отправлен: 27.01.2008, 23:15
Вопрос № 120.443
Здравствуйте. Есть все та же программа (пишется в MS Visual Studio, приведена в приложении). На нее нужно добавить командную строку (что-то вроде edit'а в Delphi), которая будет располагаться в нижней части окна. Как это сделать используя только WinAPI? И еще: где в MSDN'е что нужно читать по созданию различных элементов окон - строк ввода, меток (надписей)?
Приложение:
Отправлен: 27.01.2008, 22:33
Вопрос задал: Blackie (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Verena
Здравствуйте, Blackie!
Создать edit, как и любой другой элемент управления, можно с помощью функции CreateWindowEx. Например, вот так:
CreateWindowEx (WS_EX_CLIENTEDGE, "edit", "", WS_CHILD | WS_VISIBLE | ES_LEFT | ES_AUTOHSCROLL, 10, 20, 500, 23, hWnd, (HMENU)10000, hInstance, NULL);
Второй параметр обязательно должен быть равен "edit", четыре числовых параметра после стиля обозначают координаты и размеры edit-а (координаты этого окна x=10, y=20, длина=500, ширина=23), hWnd обозначает родительское окно (главное окно программы в общем случае), далее идёт число-идентификатор окна (должно быть уникальным). Предпоследний параметр игнорируется в системах, начиная с NT. Подробней про функцию и все её параметры можно почитать в MSDN-е, а примеры использования с описанием можно посмотреть
тут. В приложении выдержка из MSDN с описанием функции.
Удачи!
Приложение:
--------- Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: Студент)
Ответ отправлен: 28.01.2008, 00:13 Оценка за ответ: 5
Отвечает: Сандров Алекс
Здравствуйте, Blackie!
Вот точно так же, как создана кнопка, только класс окна "EDIT"
сразу после кнопки:
HWND hEdit = CreateWindowEx(0, "EDIT", "сразу есть текст", WS_CHILD|WS_VISIBLE|WS_BORDER, 350, 350, 300, 50, hWnd, 3, hInstance, 0);
только координаты надо высчитать. Можно от главного окна взять рект:
RECT rt;
GetWindowRect(hWnd, &rt);
Ответ отправил: Сандров Алекс (статус: 2-ой класс)
Ответ отправлен: 28.01.2008, 06:27 Оценка за ответ: 4 Комментарий оценки: Компилятор ругался на HWND hEdit. Эта функция не заработала пока я не поменял в аргументах 3 на NULL, а сам edit вообще не был виден пока не поменял rt.bottom - 20 на константу.
Вопрос № 120.463
Очень срочно нужна помощь!
С++
1) Написать функцию, которая в заданной строке считает количество букв, цифр и других знаков. Все три значения вернуть из функции.
2) В заданной строке отсортировать символы по алфавиту (написать функцию)
3) В строке, заданной пользователем, посчитать количество слов (написать функцию)
Отправлен: 28.01.2008, 01:53
Вопрос задал: Allexandr (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Verena
Здравствуйте, Allexandr!
Смотрите решение Ваших задач в приложении, среда разработки - VS 2005.
Приложение:
--------- Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: Студент)
Ответ отправлен: 28.01.2008, 02:42 Оценка за ответ: 5
Вопрос № 120.480
Здравствуйте!
Помогите, может кто делал что то подобное?
1) Составить программу реализующую трухмерное преобразование с фигурой:
Фигура - Октаэдр
Преобразование - Изменение масштаба по осям X, Y, Z и общее масштабирование по трём осям.
Фигура должна отображаться в контурнов виде без удаления невидимых линий и уметь вращаться округ произвольной оси. Управление осущест в с помощью. 9 цифровых клавиш
2) Написать программу для изображения многогранника вращающегося вокруг оси OY . ось вращения не должна совпадать с собственной вертикальной осью фигуры.
Фигура - Гексаэдр
Проекция - Диметрия
Отправлен: 28.01.2008, 07:17
Вопрос задал: Psa1024 (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ross
Здравствуйте, Psa1024!
Ответ на первую половину вопроса. Создай win32 проект в Visual Studio и вместо кода, сгенерированного мастером вставь код в приложении. Если надо могу подумать и над второй задачей, только уточни мне, что такое диметрическая проекция и с чем ее есть (в минифорум)
Приложение:
--------- Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 01.02.2008, 05:24
Вопрос № 120.516
Здравствуйте! Помогите решить задачу. Условие: Дана строка и подстрока,найти сколько раз повторяется строка в подстроке и вывести на экран количество повторов. Заранее большое спасибо!