Объясните плз принцип перегрузки оператора [] и совместное использование его с оператором = , а то никак догнать не могу как он работает... Code: class Animal { public: Animal() {} Animal(int a): age(a) { } ~Animal() { }; int Get() { return age; } private: int age; }; template <class T> class Array { public: Array() { size = 10; pType = new T[size]; for(int i = 0; i < size; i++) { pType[i] = 0; } } Array(const Array& rhs); ~Array() { delete [] pType; } int GetSize() {return size;} Array& operator = (const Array& rhs); T& operator [] (int offset) { return pType[offset]; } private: T* pType; int size; }; template<class T> Array<T>& Array<T>::operator =(const Array &rhs) { if(this == &rhs) return this; delete [] pType; pType = new T[rhs.GetSize()]; for( int i = 0; i < rhs.GetSize(); i++) pType[i] = rhs[i]; return *this; } void main() { Array<int> arr; Array<Animal> zoo; Animal* pAnimal; for(int i = 0; i < 10; i++) { arr[i] = i*3;// !Начиная с этого места! pAnimal = new Animal(i*2); zoo[i] = *pAnimal; } } Что вызывается первым, а что вторым(с метки в коде) и какая цепочка следует?
встаешь на строку zoo = *pAnimal; и жмешь Step Into и наблюдаешь, как это все работает. Увидишь и создание копии объекта и порядок вызова операторов.
опа, дошло все сразу! пасиб) плохо что не писалось в книге про эти примочки. Я обычно F10 постоянно при отладке использовал - хз где узнал об этом.
хелп, срочно нужен исходник на pure c задача: выполнить системную команду(unix), сама команда берется как аргумент, и возвращает результат выполнения т.е на перле я бы написал system($_[0]) или system($ARGV[0]) хеелп(
да по сути так же #include <stdlib.h> int _tmain(int argc, char* argv[]) { system(argv[1]); return 0; }
Привет, мытаюсь создать оконное приложение на С++ Компилятор ругается: Юзаю Visual Studio 2008 И посоветуйте пожалуйста книгу по программированию на С++ с WinAPI Зарание благодарен.
VS подефолту считает что все API юзают wide char по этом настрйо в проекте чтобы был не юникод и не расширенные строки. Или пиши функцию MessageBoxA или если юзаеш MessageBoxW то перед стркоами пиши букву L типа L"строка"
ставь L перед строками или TEXT("blablabla") MessageBox(NULL, L"Простейшая программа!",L"WinAPI App", 0); //сообщение
slesh,Ra$cal - благодарю, заработало! А что на счет книги, а то как то страшно выглядит этот АПИ, да и консольные ф-и в нем не фурычут =\ И как быть если мне нужно вывесть из переменной данные: Code: int a = 111; MessageBox(NULL, a,L"WinAPI App", 0); //сообщение
тогда тебе нужно из числа в строку и строку уже выводить. можно заюзать к примеру sprintf() чтобы в буфер загнать по шаблону
С этим более мение понятно.. Но вот захотел потестить ф-ю GetDlgItemText(), но она теребует хендл родительского окна, то есть окна с которого она вызывается, напимер CreateWindow. Как его узнать?
GetParent, FindWindow. Зависит от того, чье это окно. Если твое - то ты должен знать его. Если в чужом процессе - можно найти
подскажите, как можно нормально загрузить текстовый файл в массив типа string? на данный момент хотелось бы создать массив указателей на объекты типа string, но я толком не знаю как это сделать. string **strs; или string *strs[]; - не то. и проблема в том, что файл режется по пробелам, а не по переводам строк. PHP: #include <iostream> #include <fstream> using namespace std; int main() { string strings[1000]; string cookies; ifstream fin("cookies.txt"); if(!fin) { cout << "cant open cookies.txt" << endl; return 1; } int n = 0; while(!fin.eof()){ fin >> strings[n]; cout << strings[n] << endl; n++; } fin.close(); return 0; }
Дикс, PHP: #include <iostream> #include <fstream> #include <string> using namespace std; int main() { string * strings = new string[1000]; //Массив указателей на стринг. string cookies; ifstream fin("123.txt"); if(!fin) { cout << "cant open file" << endl; return 1; } int n = 0; while(!fin.eof()){ getline(fin, strings[n]); //Читает строку. cout << strings[n] << endl; n++; } fin.close(); return 0; }
Есть ли готовая функция копирования подстроки из строки, когда известен начальный и конечный символ подстроки? Объясню. Есть строка Code: Hello_world! Начальный символ 6, конечный 11. Функция должна возвратить слово world. Ну или же не возвращать, а записывать в переменную, всеравно...
во первых чтобы бесконечно выводить можно просто написать while(true) во-вторых месаджбокс синхронный и останвливает поток, вызвавший функцию. нажми он и выскочит еще один. если хочешь много много окошек делать - или создавай потоки и в них уже вызов месаджбокса. вариант второй - в ресурсах создай окошко и создавай его немоадальным через апи CreateDialog
Да меня сам принцип работы интерисовал) А возможно сделать чтото типа такого: ...................................................................................... int MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType ); ...................................................................................... Допустим мы имеем: MessageBox(NULL,L"TEST",L"CAPTION",MB_OK); И сделать условие типа: if(lpText == "TEST") { ............ } У меня почемуто не получалось, говорит что lpText не объявлен, но он ведь должен объявлятся в самой функцие, не так ли?