• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

przeciążenie konstruktora

0 głosów
262 wizyt
pytanie zadane 12 października 2016 w C i C++ przez alchem Obywatel (1,210 p.)

Chce przeciążyć konstruktor, tzn mam taki kawałek kodu:

#include <iostream>
#include <vector>
#include "macierz.h"

using namespace std;

 Macierz::Macierz(int n)
    :n_(n)
{
    vector <double> liczby;
    for(int i = 0; i <n*n; i++)
    {
        liczby.push_back(0);
    }

}


Macierz::Macierz(int n, double m)
    :n_(n), m_(m)
{
    vector <double> liczby;
    for(int i = 0; i <n*n; i++)
    {
        liczby.push_back(m);
    }

}

ale przy wywołaniu :

Macierz m1(1);
    Macierz m2(1,2);

Wyskakuje mi błąd że wywołanie  Macierz m1(1) jest dwuznaczne, dlaczego tak jest? 

Wydaje mi się że program sam powinien się domyślić, którego konstruktora ma użyć (tak samo jak to jest z funkcją)

1 odpowiedź

+2 głosów
odpowiedź 12 października 2016 przez niezalogowany
edycja 30 sierpnia 2017
 
Najlepsza

Czy w pliku macierz.h masz przypisanie jakichś wartości gdy nie zostaną podane? Np:

class Macierz
{
    public:
    Macierz(int n=1);
    Macierz(int n=2, double m=2);
};

Wtedy będzie to dwuznaczne, ale jeżeli usuniesz te wartości to wszystko powinno być dobrze.

komentarz 12 października 2016 przez alchem Obywatel (1,210 p.)
Dziękuję, teraz wszystko działa poprawnie.
1
komentarz 12 października 2016 przez niezalogowany

Dodam jeszcze by było mniej więcej wiadomo o co tu chodzi. Mając taki konstruktor z wartościami Macierz(int n=2, double m=2); można podać w mainie:

Macierz hipcio(30);

To utworzy się obiekt uogólniając o parametrach n=30 i m=2, bo jeżeli nie podamy m to w kodzie kazane, że wziąć trzeba m=2. Gdy mamy dwa konstruktory z wartościami o takimi:

Macierz(int n=1);
Macierz(int n=2, double m=2); 

To nie wiadomo, który wziąć, bo podając tylko n nie wiadomo czy życzymy sobie by m nie było (konstruktor bez m) czy by wartość ta ma zostać ustawiona odgórnie (konstruktor z m=2); Podobnie będzie gdy nie podamy n.

Podobne pytania

0 głosów
0 odpowiedzi 310 wizyt
pytanie zadane 27 stycznia 2021 w C i C++ przez Miaugosia Nowicjusz (210 p.)
0 głosów
1 odpowiedź 1,198 wizyt
pytanie zadane 26 lipca 2017 w C i C++ przez WireNess Stary wyjadacz (11,240 p.)
0 głosów
1 odpowiedź 428 wizyt
pytanie zadane 5 września 2016 w C i C++ przez hunter44 Nowicjusz (210 p.)

93,607 zapytań

142,530 odpowiedzi

322,999 komentarzy

63,098 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...