Как узнать длину строки и как присвоить переменной это значение? String s=Edit1->Text; unsigned strlen(int *s);
#include <iostream> а не <iostream.h> using namespace std; clrscr() из conio.h заменить на system("clear") из stdlib.h и все должно работать.
как по вашему элегантно решить задачу: класс1 должен содержать указатель на класс2, который должен инициализироваться классом1 Вариант: Создать объект класса1 Создать объект класс2 с передачей ему указателя на ранее создынне объект класса1 Передать в объект класса1 указательно на объект класса2 Не предлогать
Ну так в чем проблема? 1) В классе 1 заводишь переменную под указатель 2) в классе 2 пишешь ф-цию типа {return this} 3) вызываешь конструктор класса 2 из класса 1 4) а потом указателю в классе1 присваиваешь результат этой ф-ции. Если я все правильно понял. UPD: Но есть момент: класс2 должен быть глобальным, или обьявленным в классе1. Если он глобальный, то нужно внимательно следить, когда он будет уничтожен. Потому как если его уже не будет, то указатель класса1 будет указывать непонятно куда.
Что значит класс глобальный ? О_о всмысле объект класса глобальный ? или область видимости класса глобальная ? конструктор класса2 вызывать из конструктора класса1 ? Но конструктору класса2 нужно передать указатель на объекта класса1, тобишь this обеъкта класса1. Интерестно проканает думаю что нет, Хотя этож указатели... должно проканать.
cupper В книгах описывают данную ситуацию так - неправильное проектирование. Возможно, стоит создать ещё один класс, который будет этаким проводником. В общем, смотри в сторону архитектуры, это полезная вещь. Заодно добьешься максимальной декомпозиции.
Ой, всмысле обьект глобальный. Но вообще лучше избегать такого. А конструктор класа вызывается не из конструктора первого, а просто из ф-ции например: Code: class A { public: A(); sometype createBObj() {B b; myptr = b.getMyPointer()}; sometype myPtr; } class B { public: B(); sometype& getMyPointer() {return *this;}; } Ну типы сам поставь какие нужно. Примерно так? Просто класс1 создает указатель на класс2, и сам его инициализирует.
cupper Что-то я ничего не понял. Code: class A() { private: B* b; public: A(){ b = new B();} }; class B() { public: B(){ } };
Может и так, варианты похожи. Из задания не очень понятно, какой более правильный. Думаю автор разберется сам ))
вот так делать можно ?) ---------------------------------------- Нужно вести статистику поступление некоторых данных, ну мол максимальное время получения, минимальное, среднее, количество данныех полученной за секунду (миксимальное, мнимальное, среднее). реализовал это на boost ptime + different_time теперь думаю может зря... Может лучше и проще и быстрее было бы заюзать clock_t ? И еще, как лучше делать замеры какой либо проделанной работы за промежуток времени ? Например у меня для каждого полученной единици данных вызывается функция в которой я фиксирую статистику. Собирать таким образом статистику для конкретного единицы легко (зафиксировал время отправки, зафиксировал время приема). Но вот колличесво полученных данных за 1 секунду у меня судя по всему реализовано криво. делаю примерно так Code: // this->seconds_ - время используемое для отсчета perSecond = currentTime - this->seconds_; // если с момента фиксации времение прошло больше 1 // секунды, фиксируем накопленную статистику, и сбрасываем // счетчики и время для отстчета на текущее if(perSecond.seconds() > 1) { if(this->msgPerSecond_ > 0) { if(this->msgPerSecond_ < this->minSentMsgPerSec_) { this->minSentMsgPerSec_ = this->msgPerSecond_; } if(this->msgPerSecond_ > this->maxSentMsgPerSec_) { this->maxSentMsgPerSec_ = this->msgPerSecond_; } this->averageSentMsgPerSec_ += this->msgPerSecond_; ++currentnumberSecond_; this->msgPerSecond_ = 0; this->seconds_ = boost::posix_time::microsec_clock::local_time(); } else { // первый заход, устанавливаем новое корректное время this->seconds_ = boost::posix_time::microsec_clock::local_time(); } } ++(this->msgPerSecond_);
Как ты написал точно нельзя. Порядок декларирования не позволит. За то можно забацать интерфейс. (и не забыть написать delete) Code: class IA { public: virtual void foo()=0; }; class B { public: B(IA* a) { a->foo(); } }; class A : public IA { public: A() { B* b = new B(this); } void foo(){} }; int _tmain(int argc, _TCHAR* argv[]) { A* a = new A(); return 0; }
Абсолютно согласен что как я написал не позволит порядок декларирования. Но ! эврика - мервки - тусуем - мусем и.... бац. http://liveworkspace.org/code/b0365b4330e5808fd2c198bbeb0e3636 по сути этот пример даже по логики подходит под мой случай. Т.к. класс B, в моем случае, это класс библиотеки. Ему при инициализации нужно передать указатель на класс (который я уже должен написать сам, в этом случае это класс А) который был бы унаследован от виртуального библиотечного класса. Дальше рассписывать не буду зачем оно так нужно, потому что это вас сильно запутает. Но так вот построена логика библиотеки. Весьма чистое решение, без чего либо лишнего и нагроможденного Вот так по сути оно выглядит http://liveworkspace.org/code/f8a78555f55e09524e9c1619cd1b4bc7 Где A_BASE предоставляет обработчики неких событий которые может вызывать B, поэтому в B нужно зарегестрировать указатель на экземпляр этого класса. Но так как A_BASE класс виртаульный, мы должны унаследовать от него и непосредственно определить логику работы в этих обработчиках. По сути через унаследованный класс строится логика работы с B, поэтому было желани все работы (включая и с B) инкапсулировать в классе A.
Доброго времени суток. Такой вопрос, как сделать обращение к какому либо компоненту в Visual C++? Например, к текстовому полю с названием Edit1. Ввожу Edit1.Text, мне компилятор выдает ошибку, что-то типа "Возможно вы имели в виду ->". Пишу Edit1->Text, так он вообще какую-то ересь выдает... Подскажите, как правильно?
cout (читать как си-аут) это объект языка C++, принимает данные с консоли, имеет перезагруженные операторы, работать с ним намного легче чем с printf, во всех смыслах этого слова. printf фунцкия языка C, можно и в C++ воспользоватся, не такая удобная как cout - приходится в "ручную" настраивать.
cout удобный говоришь ?)) Code: cout << "Мне " << year << " лет " << month << " месяцев и " << day << " дней, и я " << pi << "здец как заебался это писать" << endl; Code: printf("мне %d лет %d месяцев и %d дней и я %4.2fздец не заебался\n", year, month, day, pi); cout - это поток, в который кидаешь что попало а он сам определяет что это и как это нужно выводить. printf принимает строку форматирования и непосредственно сами выводимые параметры.