[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. horlyk

    horlyk Elder - Старейшина

    Joined:
    2 Dec 2007
    Messages:
    132
    Likes Received:
    6
    Reputations:
    0
    Объясните плз принцип перегрузки оператора [] и совместное использование его с оператором = , а то никак догнать не могу как он работает...


    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;
            }
    }
    Что вызывается первым, а что вторым(с метки в коде)
    и какая цепочка следует?
     
    #3561 horlyk, 22 Aug 2009
    Last edited: 22 Aug 2009
  2. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    встаешь на строку
    zoo = *pAnimal;


    и жмешь Step Into и наблюдаешь, как это все работает. Увидишь и создание копии объекта и порядок вызова операторов.
     
    1 person likes this.
  3. horlyk

    horlyk Elder - Старейшина

    Joined:
    2 Dec 2007
    Messages:
    132
    Likes Received:
    6
    Reputations:
    0


    опа, дошло все сразу! пасиб) плохо что не писалось в книге про эти примочки. Я обычно F10 постоянно при отладке использовал - хз где узнал об этом.
     
    #3563 horlyk, 22 Aug 2009
    Last edited: 22 Aug 2009
  4. Spyder

    Spyder Elder - Старейшина

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    хелп, срочно
    нужен исходник на pure c
    задача: выполнить системную команду(unix), сама команда берется как аргумент, и возвращает результат выполнения
    т.е на перле я бы написал system($_[0]) или system($ARGV[0])
    хеелп(
     
    #3564 Spyder, 23 Aug 2009
    Last edited: 23 Aug 2009
  5. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    да по сути так же

    #include <stdlib.h>


    int _tmain(int argc, char* argv[])
    {
    system(argv[1]);

    return 0;
    }
     
    #3565 Ra$cal, 23 Aug 2009
    Last edited: 23 Aug 2009
    1 person likes this.
  6. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    Привет, мытаюсь создать оконное приложение на С++
    Компилятор ругается:
    Юзаю Visual Studio 2008

    И посоветуйте пожалуйста книгу по программированию на С++ с WinAPI
    Зарание благодарен.
     
    #3566 -m0rgan-, 23 Aug 2009
    Last edited: 23 Aug 2009
  7. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    VS подефолту считает что все API юзают wide char
    по этом настрйо в проекте чтобы был не юникод и не расширенные строки.
    Или пиши функцию MessageBoxA
    или если юзаеш MessageBoxW то перед стркоами пиши букву L типа
    L"строка"
     
    1 person likes this.
  8. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    ставь L перед строками или TEXT("blablabla")

    MessageBox(NULL, L"Простейшая программа!",L"WinAPI App", 0); //сообщение
     
    1 person likes this.
  9. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    slesh,Ra$cal - благодарю, заработало!
    А что на счет книги, а то как то страшно выглядит этот АПИ, да и консольные ф-и в нем не фурычут =\

    И как быть если мне нужно вывесть из переменной данные:
    Code:
    int a = 111;
    MessageBox(NULL, a,L"WinAPI App", 0); //сообщение
     
    #3569 -m0rgan-, 23 Aug 2009
    Last edited: 23 Aug 2009
  10. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    тогда тебе нужно из числа в строку и строку уже выводить.
    можно заюзать к примеру sprintf() чтобы в буфер загнать по шаблону
     
  11. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    С этим более мение понятно..
    Но вот захотел потестить ф-ю GetDlgItemText(), но она теребует хендл родительского окна, то есть окна с которого она вызывается, напимер CreateWindow. Как его узнать?
     
  12. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    GetParent, FindWindow. Зависит от того, чье это окно. Если твое - то ты должен знать его. Если в чужом процессе - можно найти
     
  13. ImNaruto

    ImNaruto New Member

    Joined:
    24 Jul 2009
    Messages:
    11
    Likes Received:
    1
    Reputations:
    0
    multiple definition of 'abonent::abonent()'
    first defined here

    Че за ошибка?
     
  14. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    видимо конструктор объявлен не один раз.
     
  15. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    подскажите, как можно нормально загрузить текстовый файл в массив типа 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;
    }
     
  16. Smapt

    Smapt Elder - Старейшина

    Joined:
    29 Jan 2008
    Messages:
    31
    Likes Received:
    32
    Reputations:
    3
    Дикс,

    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(finstrings[n]); //Читает строку.
                
    cout << strings[n] << endl
                
    n++; 
            } 

        
    fin.close(); 

        return 
    0
    }  
     
    1 person likes this.
  17. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Есть ли готовая функция копирования подстроки из строки, когда известен начальный и конечный символ подстроки? Объясню. Есть строка
    Code:
    Hello_world!
    Начальный символ 6, конечный 11. Функция должна возвратить слово world.

    Ну или же не возвращать, а записывать в переменную, всеравно...
     
  18. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    уже разобрался)
     
  19. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    во первых чтобы бесконечно выводить можно просто написать while(true)
    во-вторых месаджбокс синхронный и останвливает поток, вызвавший функцию. нажми он и выскочит еще один. если хочешь много много окошек делать - или создавай потоки и в них уже вызов месаджбокса. вариант второй - в ресурсах создай окошко и создавай его немоадальным через апи CreateDialog
     
  20. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    Да меня сам принцип работы интерисовал)

    А возможно сделать чтото типа такого:
    ......................................................................................
    int MessageBox( HWND hWnd,
    LPCTSTR lpText,
    LPCTSTR lpCaption,
    UINT uType
    );
    ......................................................................................

    Допустим мы имеем:
    MessageBox(NULL,L"TEST",L"CAPTION",MB_OK);

    И сделать условие типа:

    if(lpText == "TEST")
    {
    ............
    }

    У меня почемуто не получалось, говорит что lpText не объявлен, но он ведь должен объявлятся в самой функцие, не так ли?
     
Thread Status:
Not open for further replies.