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

przeciążenie konstruktora

VPS Starter Arubacloud
0 głosów
181 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 200 wizyt
pytanie zadane 27 stycznia 2021 w C i C++ przez Miaugosia Nowicjusz (210 p.)
0 głosów
1 odpowiedź 1,016 wizyt
pytanie zadane 26 lipca 2017 w C i C++ przez WireNess Stary wyjadacz (11,240 p.)
0 głosów
1 odpowiedź 373 wizyt
pytanie zadane 5 września 2016 w C i C++ przez hunter44 Nowicjusz (210 p.)

93,008 zapytań

141,975 odpowiedzi

321,256 komentarzy

62,350 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...