Pokaż wyniki 1 do 3 z 3

Temat: Argumenty w konstruktorach

  1. #1
    Zarejestrowany
    Dec 2011
    Skąd
    Mazury
    Postów
    133

    Domyślnie Argumenty w konstruktorach

    Do rzeczy. Prosty kod niemal żywcem zerżnięty z kursu c++.

    Kod:
    #include <iostream>
    #include <string>
    
    using namespace std;
    
      class Klasa
       {
            public:
                 string nazwa;
                 Klasa(int zmienna1, int zmienna2 );
       };
     
       Klasa::Klasa(int zmienna1, int zmienna2 )
       {
            cout << "Konstruktor działa!" << endl;
            cout << endl;
       }
    
    int main()
    {
    	int zmienna1, zmienna2;
    	Klasa( zmienna1, zmienna2 );
    }
    Mimo, że ten kod nic nie robi poza informowaniem o działającym konstruktorze, to kompiluje się i działa. Jednak identyczny kod różniący się jedynie ilością argumentów w konstruktorze już nie:

    Kod:
    #include <iostream>
    #include <string>
    
    using namespace std;
    
      class Klasa
       {
            public:
                 string nazwa;
                 Klasa(int zmienna1 );
       };
     
       Klasa::Klasa(int zmienna1 )
       {
            cout << "Konstruktor działa!" << endl;
            cout << endl;
       }
    
    int main()
    {
    	int zmienna;
    	Klasa( zmienna );
    }
    Kompletnie nie rozumiem, dlaczego ten sam konstruktor o dwóch argumentach wywołuje się i działa, zaś w przypadku wywołania konstruktora z jednym argumentem pojawia się konflikt deklaracji.
    "Trąba powietrzna moich zepsutych myśli, zrywa ci z karku kołnierz ortopedyczny"

  2. #2

    Domyślnie

    Cytat Napisał Orb Zobacz post
    Do rzeczy. Prosty kod niemal żywcem zerżnięty z kursu c++.

    Kod:
    #include <iostream>
    #include <string>
    
    using namespace std;
    
      class Klasa
       {
            public:
                 string nazwa;
                 Klasa(int zmienna1, int zmienna2 );
       };
     
       Klasa::Klasa(int zmienna1, int zmienna2 )
       {
            cout << "Konstruktor działa!" << endl;
            cout << endl;
       }
    
    int main()
    {
    	int zmienna1, zmienna2;
    	Klasa( zmienna1, zmienna2 );
    }
    Mimo, że ten kod nic nie robi poza informowaniem o działającym konstruktorze, to kompiluje się i działa. Jednak identyczny kod różniący się jedynie ilością argumentów w konstruktorze już nie:

    Kod:
    #include <iostream>
    #include <string>
    
    using namespace std;
    
      class Klasa
       {
            public:
                 string nazwa;
                 Klasa(int zmienna1 );
       };
     
       Klasa::Klasa(int zmienna1 )
       {
            cout << "Konstruktor działa!" << endl;
            cout << endl;
       }
    
    int main()
    {
    	int zmienna;
    	Klasa(zmienna );
    }
    Kompletnie nie rozumiem, dlaczego ten sam konstruktor o dwóch argumentach wywołuje się i działa, zaś w przypadku wywołania konstruktora z jednym argumentem pojawia się konflikt deklaracji.
    Mi oba przykłady lądują w debugerze, zanim zobaczę konstruktor działa!.
    Jeśli chodzi o ten przykład z jednym argumencie to mi ide podpowiada że nie ma domyślnego konstruktora.
    Kod:
    int main()
    {
    	int zmienna;
    	Klasa k(zmienna);
    	system("pause");
    }
    ten kod już działa, jednak nie wytłumaczę tego zachowania.
    Ostatnio edytowane przez ocb : 03-19-2014 - 18:57

  3. #3

    Domyślnie

    Argumenty w konstruktorach są potwornie wkurzające, bo utrudnią testowanie i szukanie błędów..
    Są oczywiście struktury które z definicji muszą tak działać, np. monady.
    Jako porzątkujący programista powinieneś ich raczej unikać.

    // edit
    Dla testowania i debugowania konstruktory z parametrami sa w najlepszym razie rowne kiepskim pomysłem jak te nie przyjmujace parametrow..
    Stoje na pozycji, że uzywanie konstruktorow jako takich bez mocnego uzasadnia jest niewskazane.
    Ostatnio edytowane przez lame2 : 03-20-2014 - 00:49

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj