brak dostepu do prywatnych skladnikow, blad z konstruktorem

0

Witam mam taki oto programik do napisania:
Zdefiniować klasę punkt zawierające prywatne składowe x, y (współrzędne w układzie
kartezjańskim) oraz publiczne metody:

  • konstruktor inicjujący wartości x i y;
  • wyswietl wyświetlający x i y;
    Zdefiniować klasę trojkat, która zawiera: prywatne składowe: punkty a, b, c klasy punkt oraz
    publiczne metody:
    – konstruktor inicjujący wartości trzech punktów, argumentami trzy punkty;
    – konstruktor inicjujący wartości trzech punktów, argumentami 6 liczb rzeczywistych;
  • dlugosc, zwracającą długość odcinka dla dwóch punktów;
  • suma_kr, zwracającą sumę boków trójkąta;
  • pole, zwracającą pole trójkąta;
    – wyswietl, wyświetlającą: współrzędne 3 punktów, sumę krawędzi i pole trójkąta.

Doszedlem do tego momentu i wszystko sie sypie. Napisalem kilka funkcji skladowych klasy bez kompilacji i potem gdy wlaczylem to wyskoczylo duzo bledow. Zmienilem potem zeby klasa trojkat dziedziczyla po klasie punkt to wyskakiwalo cos ze zle zdefiniowane konstruktory probowalem lista inicjalizacyjna i normalnym sposobem w ciele konstruktora. Ale tak czy owak te funkcje nie maja byc z tego co pamiętam spokrewnione. Liczę na jakieś wskazówki

#include <iostream>

using namespace std;
class punkt
{
private:
    float x,y;
public:
    punkt(float a,float b);
    void wyswietl();
};

//*************************

class trojkat
{
private:
    punkt a,b,c;
public:
    trojkat(punkt,punkt,punkt);
    trojkat(float,float,float,float,float,float);
    float dlugosc(punkt, punkt);
    float suma();
    float pole();
    void wyswietl();

};

//klasa punkt
punkt::punkt(float a,float b): x(a), y(b){}
void punkt::wyswietl()
{
    cout<<"Punkt ma wspolrzedne: ("<<x<<","<<y<<")"<<endl;
}

//klasa trojkat

trojkat::trojkat(punkt x,punkt y,punkt z): a(x),b(y),c(z)
{
}
trojkat::trojkat(float a,float b,float c,float d, float e,float f):a(a,b),b(c,d),c(d,e)
{
}

float trojkat::dlugosc(punkt q,punkt w)
{
    return sqrt((q.x-q.y)*(q.x-q.y)+(w.x-w.y)*(w.x-w.y));
}


float trojkat::suma()
{
    return dlugosc(a,b)+dlugosc(b,c)+dlugosc(c,a);
}
float trojkat::pole()
{
    int p;
    p=suma()/2;
    return sqrt(p*(p-a)*(p-b)*(p-c))
}
void trojkat::wyswietl()
{
    cout<<"Wspolrzedne punktow: A("<<a.x<<","<<b.x<<"), B("<<a.y<<","<<b.y<<"), C("<<a.z<<","<<b.z<<")"<<endl;
    cout<<"Suma krawedzi: "<<suma();
    cout<<"Pole trojkata: "<<pole();
}
int main()
{
    punkt p1(1,0);
    p1.wyswietl();

    return 0;
}
 
1

Składowe klasy punkt muszą być publiczne inaczej to jakieś WTF

0

Zdefiniować klasę punkt zawierające prywatne składowe x, y (współrzędne w układzie
kartezjańskim) oraz publiczne metody:

  • konstruktor inicjujący wartości x i y;
  • wyswietl wyświetlający x i y;

a jak zrobic zeby była funkcja zaprzyjazniona ? bojak dam w punkcie x,y do protected to pozniej w konstruktorze w trojkat wyskakuje mi cos takiego:

|error: no matching function for call to 'punkt::punkt()'|
note: candidates are:|

0

Na to można powiedzieć tylko dwie rzeczy:

  1. autor zadania - kretyn
  2. zrób sobie gettery: float X()const { return x; } lub zaprzyjaźnij całą klasę
0

AD1 autor zadania- mgr od cwiczen :D, ok zaprzyjaznilem całą klase bo gettery to nie wiem co to jest i na razie nie będe się w to zagłębiać. Ale jak wzialem zmienilem w klasach na to:

class punkt
{
protected:
    float x,y;
public:
    punkt(float a,float b);
    void wyswietl();
};

//*************************

class trojkat:public punkt
{
private:
    punkt a,b,c;
public:
    trojkat(punkt,punkt,punkt);
    trojkat(float,float,float,float,float,float);
    float dlugosc(punkt, punkt);
    float suma();
    float pole();
    void wyswietl();

}; 

to wyskakiwał spam błędów. Źle coś zrobiłem z zaprzyjaznianiem?

== Build: Debug in zad3 (compiler: GNU GCC Compiler) ===

C:\Users\Baca\Desktop\lab5\zad3\main.cpp||In constructor 'trojkat::trojkat(punkt, punkt, punkt)':|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|38|error: no matching function for call to 'punkt::punkt()'|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|38|note: candidates are:|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|30|note: punkt::punkt(float, float)|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|30|note: candidate expects 2 arguments, 0 provided|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|4|note: punkt::punkt(const punkt&)|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|4|note: candidate expects 1 argument, 0 provided|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp||In constructor 'trojkat::trojkat(float, float, float, float, float, float)':|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|41|error: no matching function for call to 'punkt::punkt()'|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|41|note: candidates are:|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|30|note: punkt::punkt(float, float)|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|30|note: candidate expects 2 arguments, 0 provided|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|4|note: punkt::punkt(const punkt&)|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|4|note: candidate expects 1 argument, 0 provided|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp||In member function 'float trojkat::dlugosc(punkt, punkt)':|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|7|error: 'float punkt::x' is protected|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|47|error: within this context|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|7|error: 'float punkt::y' is protected|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|47|error: within this context|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|7|error: 'float punkt::x' is protected|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|47|error: within this context|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|7|error: 'float punkt::y' is protected|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|47|error: within this context|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|7|error: 'float punkt::x' is protected|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|47|error: within this context|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|7|error: 'float punkt::y' is protected|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|47|error: within this context|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|7|error: 'float punkt::x' is protected|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|47|error: within this context|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|7|error: 'float punkt::y' is protected|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|47|error: within this context|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|47|error: 'sqrt' was not declared in this scope|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp||In member function 'float trojkat::pole()':|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|59|error: no match for 'operator-' in 'p - ((trojkat*)this)->trojkat::a'|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|59|note: candidates are:|
c:\program files (x86)\codeblocks\mingw\bin..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator.h|329|note: template<class _Iterator> typename std::difference_type std::operator-(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&)|
c:\program files (x86)\codeblocks\mingw\bin..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator.h|329|note: template argument deduction/substitution failed:|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|59|note: mismatched types 'const std::reverse_iterator<_Iterator>' and 'int'|
c:\program files (x86)\codeblocks\mingw\bin..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator.h|386|note: template<class _IteratorL, class _IteratorR> typename std::reverse_iterator<_IteratorL>::difference_type std::operator-(const std::reverse_iterator<_IteratorL>&, const std::reverse_iterator<_IteratorR>&)|
c:\program files (x86)\codeblocks\mingw\bin..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator.h|386|note: template argument deduction/substitution failed:|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|59|note: mismatched types 'const std::reverse_iterator<_IteratorL>' and 'int'|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|59|error: no match for 'operator-' in 'p - ((trojkat*)this)->trojkat::b'|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|59|note: candidates are:|
c:\program files (x86)\codeblocks\mingw\bin..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator.h|329|note: template<class _Iterator> typename std::difference_type std::operator-(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&)|
c:\program files (x86)\codeblocks\mingw\bin..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator.h|329|note: template argument deduction/substitution failed:|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|59|note: mismatched types 'const std::reverse_iterator<_Iterator>' and 'int'|
c:\program files (x86)\codeblocks\mingw\bin..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator.h|386|note: template<class _IteratorL, class _IteratorR> typename std::reverse_iterator<_IteratorL>::difference_type std::operator-(const std::reverse_iterator<_IteratorL>&, const std::reverse_iterator<_IteratorR>&)|
c:\program files (x86)\codeblocks\mingw\bin..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator.h|386|note: template argument deduction/substitution failed:|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|59|note: mismatched types 'const std::reverse_iterator<_IteratorL>' and 'int'|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|59|error: no match for 'operator-' in 'p - ((trojkat*)this)->trojkat::c'|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|59|note: candidates are:|
c:\program files (x86)\codeblocks\mingw\bin..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator.h|329|note: template<class _Iterator> typename std::difference_type std::operator-(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&)|
c:\program files (x86)\codeblocks\mingw\bin..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator.h|329|note: template argument deduction/substitution failed:|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|59|note: mismatched types 'const std::reverse_iterator<_Iterator>' and 'int'|
c:\program files (x86)\codeblocks\mingw\bin..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator.h|386|note: template<class _IteratorL, class _IteratorR> typename std::reverse_iterator<_IteratorL>::difference_type std::operator-(const std::reverse_iterator<_IteratorL>&, const std::reverse_iterator<_IteratorR>&)|
c:\program files (x86)\codeblocks\mingw\bin..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator.h|386|note: template argument deduction/substitution failed:|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|59|note: mismatched types 'const std::reverse_iterator<_IteratorL>' and 'int'|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|59|error: 'sqrt' was not declared in this scope|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|60|error: expected ';' before '}' token|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp||In member function 'void trojkat::wyswietl()':|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|7|error: 'float punkt::x' is protected|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|63|error: within this context|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|7|error: 'float punkt::x' is protected|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|63|error: within this context|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|7|error: 'float punkt::y' is protected|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|63|error: within this context|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|7|error: 'float punkt::y' is protected|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|63|error: within this context|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|63|error: 'class punkt' has no member named 'z'|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|63|error: 'class punkt' has no member named 'z'|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|74|error: 'in' does not name a type|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp||In member function 'float trojkat::pole()':|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|60|warning: control reaches end of non-void function [-Wreturn-type]|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp||In member function 'float trojkat::dlugosc(punkt, punkt)':|
C:\Users\Baca\Desktop\lab5\zad3\main.cpp|48|warning: control reaches end of non-void function [-Wreturn-type]|
== Build failed: 35 error(s), 2 warning(s) (0 minute(s), 1 second(s)) ===

1

To co zrobiłeś nazywa się dziedziczeniem: http://bit.ly/1bJeV3S

1

Ubiegłeś mnie, lol.
Młody wpisz: friend class trojkat;

0

zaprzyjaźnianie (friend) jest w nastepnym pdf z zadaniami dopierio a tutaj po prostu nie poprawila bledu w zadaniach float x,y w class punkt maja byc public nie private . Dzieki wszystkim za pomoc

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