Gdzie jest błąd ?

0

Gdzie jest błąd ze nie mogę utworzyć obiektu k1 ?

#include <iostream>
#include <math.h>

using namespace std;

class Punkt
{
    float x,y;
    string nazwa;

public:
    void wyswietl()
    {
        cout<<nazwa<<"("<<x<<","<<y<<")"<<endl;

    }
    Punkt(string n, float a=0,float b=0)
    {
        nazwa=n;
        x=a;
        y=b;
    }
};

class Kolo  :public Punkt //klasa kolo dzidziczy z punkt
{
    float r;
    string nazwa;

public:
    void wyswietl()
    {
        cout<<"kolo o nazwie: "<<nazwa<<endl;
        cout<<"srodek kola: "<<endl;
        Punkt::wyswietl();
        cout<<"Promien: "<<r<<endl;
        cout<<"pole kola: "<<M_PI*r*r<<endl;
    }

    Kolo(string nk, string np,float a,float b,float pr):Punkt(np,a,b)
    {
        nazwa=nk;
        r=pr;
    }
};

int main()
{

Kolo k1;
k1.wyswietl();

    return 0;
}

1

Twój konstruktor wymaga 5 argumentów które musisz przekazać:

Kolo k1(nk, np, a, b, pr); 
// Dla przykładu:
Kolo k1("A", "X", 5.0f, 5.0f, 5.0f);
1

... albo dopisz defaultowy ctor Kolo(){} oraz Punkt(){}.

0

Ale mam powyżej konstruktor który ma 5 argumentów

0
int main()
{
 
Kolo k1; // tutaj muszą być podane, przy definiowaniu obiektu
k1.wyswietl();
 
    return 0;
}

Teraz nie można utworzyć obiektu, bo nie ma deklaracji domyślnych konstruktorów.

0

Tam piszesz że przyjmuje 5 argumentów.

Taki sam przykład na funkcji:

int times_two(int number) // Ta funkcja przyjmuje jakąś liczbę
{
	return number * 2; // Następnie zwraca ją pomnożoną przez 2
}

Funkcja ta nie wie jaką liczbę przekażemy i będzie działać z jakąkolwiek wartością, a więc:

std::cout << times_two(5); // Wypisze 10
std::cout << times_two(10); // 20
std::cout << times_two(3); // 6

Na tej samej zasadzie działa konstruktor.

0

A nie da się tych argumentów przekazać od razu przy tworzeniu konstruktora tak jak ja to zrobiłem ?

0

Grunt w tym, że nie przekazałeś argumentów do konstruktora. Jedynie zadeklarowałeś, że konstruktor ma przyjmować pięć argumentów.
Taką ma składnię C++ (i nie tylko) i tego nie obejdziesz ;)
http://www.cplusplus.com/doc/tutorial/classes/

0

@Chory_Ogrodnik - Można byłoby stworzyć domyślny konstruktor ustawiać wartości odpowiednich pól, tylko powiedz mi co jeśli chcesz stworzyć jedno koło o nazwie A i drugie o nazwie B? Po to właśnie konstruktor przyjmuje te argumenty aby można było to zrobić. Twój pomysł jest sprzeczny z ideą programowania obiektowego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1