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

wstep do obiektowego C++

Object Storage Arubacloud
0 głosów
1,317 wizyt
pytanie zadane 17 maja 2020 w C i C++ przez Dynamic Bywalec (2,910 p.)

Witam, mam Takie zadania 

1. Utwórz klasę opisującą punkt w układzie kartezjańskim. Klasa ta powinna mieć funkcje składowe, które umożliwiają: (a) przypisanie współrzędnych punktu, (b) wypisanie współrzędnych punktu, (c) obliczenie odległości punktu od innego punktu (tej samej klasy), (d) przesunięcie punktu o wektor [x,y] 

2. Utwórz klasę opisującą okrąg w układzie kartezjańskim. Klasa powinna umieć zainicjować wartości opisujące okrąg (zarówno postaci punktu środka i dł. promienia, jak i wsp. środka i dł promienia), wypisać informacje o sobie (środek, długość promienia), policzyć swoje pole, określić liczbę punktów wspólnych z obiektem takiej samej klasy. Skorzystaj z klasy punkt stworzonej w poprzednim zadaniu.

Napisałem taki kod, mógłby go ktoś sprawdzić pod względem błędów popełnionych w kodzie?

main.cpp:

#include <iostream>
#include "pkt.h"
using namespace std;
int main()
{

    Punkt A(2,2);
    Punkt B(8,6);
    Punkt wektor(-8,6);
    A.wypisz();
    cout << "odleglosc punktu a i b to: "<< A.odl(B) << endl;
    A.przesun(wektor);


    Punkt okrag(5,5,8);
    okrag.wypiszOkrag();
    okrag.poleKola();

    Punkt okrag2(5,5,8);

    okrag.stycznePunkty(okrag2, okrag.odl(okrag2));
    return 0;
}

pkt.h

class Punkt
{
    double x;
    double y;
    double r;
public:
    Punkt(double ax, double ay); //konstruktor
    Punkt(double ax, double ay, double ar);
    void wypisz();
    double odl(Punkt &P);
    void przesun(Punkt &v);

    void wypiszOkrag();
    void poleKola();
    void stycznePunkty(Punkt &o2, double s);
};

pkt.cpp:

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

using namespace std;

    Punkt::Punkt(double ax, double ay, double ar) :x(ax), y(ay), r(ar) {} //konstruktor
    Punkt::Punkt(double ax, double ay) :x(ax), y(ay) {} //konstruktor
    void Punkt::wypisz()
    {
        cout << "Punkt A "<<"("<< x << ","<< y <<")" <<endl;
    }
    double Punkt::odl(Punkt &P)
    {
         return sqrt(pow(x-P.x, 2)+pow(y-P.y, 2));
    }
    void Punkt::przesun(Punkt &v)
    {
        cout << "Punkt A("<<x<<","<<y<<")"<< " po przesunieciu o wektor v["<<v.x<<","<<v.y<<"] = "<<"A'("<<x+v.x<<","<<y+v.x<<"]"<<endl<<endl<<endl;
    }

    void Punkt::wypiszOkrag()
    {
        cout << "srodek okregu: "<< x <<","<<y<< " dl promienia: " << r<<endl;
    }
    void Punkt::poleKola()
    {
        cout << "Pole kola= " << M_PI*pow(r,2)<<endl;
    }
    void Punkt::stycznePunkty(Punkt &o2, double s)
    {
        if(s<abs(r-o2.r)||s>r+o2.r)
        {
            cout << "zero";
        }
        else if(x==o2.x && y==o2.y && r==o2.r)
        {
            cout << "nieskonczenie wiele";
        }
        else if(abs(r-o2.r)<s && s<r+o2.r)
        {
            cout << "dwa punkty";
        }
        else if(s==abs(r-o2.r)||s==r+o2.r)
        {
            cout << "jeden";
        }
    }

z góry dziękuję 

komentarz 17 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)
Ale to nie jest cale zadanie? Miales zainicjowac klase Okrag, a nie utworzyc funkcje liczace. Klasa okrad i punkt to 2 niezalezne klasy, mowa tu o agregacji, tzn okrag uzywa punktu

1 odpowiedź

+1 głos
odpowiedź 17 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)
wybrane 30 maja 2020 przez Dynamic
 
Najlepsza

Zaraz mnie juz nie bedzie, wiec:

1. Zadanie mowi o stworzeniu 2 klas, a nie jednej

2. Musisz tu wykorzystac kompozycje

3. Wklejam Ci przykladowy kod, jak moglbys to rozwiazac, w razie pytan zapytaj, pewnie ktos Ci odpowie lub poprawi moj kod, jezeli jest cos zle, ale po skommpilowaniu nie zauwazylem zadnych bledow ani nic. Kod troche sie rozni od Twojego, ale i tak musisz go zrozumiec, skopiowanie nic Ci nie da, no chyba tylko tyle ze jedno zadanie domowe bedziesz mial za soba, a pozniej nie bedziesz wiedzial, jak to dziala:

#include <iostream>
#include <cmath>

class Point {
private:
    double x;
    double y;
    double z;
public:
    Point () = delete;
    Point (double x, double y, double z) : x(x), y(y), z(z) {};
    friend std::ostream& operator << (std::ostream &output, const Point *point) {
        output << "x: " << point->x << ", y: " << point->y << ", z: " << point->z;
        return output;
    }
    inline double distance (Point *point2) {
        return (sqrt(
                pow(point2->x - this->x, 2) +
                pow(point2->y - this->y, 2) +
                pow(point2->y - this->z, 2)
        ));
    }
    inline Point& operator= (Point *point2) {
        this->x = point2->x;
        this->y = point2->y;
        this->z = point2->z;
        return *this;
    }
    inline void move (Point *moveFactor) {
        this->x += moveFactor->x;
        this->y += moveFactor->y;
        this->z += moveFactor->z;
    }
};
class Circel {
private:
    double r;
    Point *middle;
public:
    Circel () = delete;
    Circel (double x, double y, double z, double r) {
        middle = new Point (x, y, z);
        this->r = r;
    }
    Circel (Point *point, double r) {
        middle = point;
        this->r = r;
    }
    friend std::ostream& operator << (std::ostream &output, const Circel *circel) {
        output << "Middle: (" << circel->middle << "), r= " << circel->r;
        return output;
    }
    inline double area () const {
        return M_PI*pow(r,2);
    }
    inline std::string staticPoints (Circel *circel) {
        //tutaj sam poglowkuj, jak to zrobic ;)
    }

};
int main()
{
    return 0;
}

 

1
komentarz 30 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)
To ze oba sa deraultowe, ale jeden jest user defined to wiem. Ale to, co bylo nizej, nie bylo do konca dla mnie swiadome. Dzieki za linki
komentarz 30 maja 2020 przez Dynamic Bywalec (2,910 p.)

Zacząłem sobie to pisać po kolei, żeby krok po kroku zrozumieć ten program i tak mam coś takiego :

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

using namespace std;


class Punkt
{
    public:
    double x, y;
public:
    Punkt(double x, double y)
    {
        this->x=x;
        this->y=y;
    }

};

class Kolo
{
    double r;
    Punkt *srodek;
public:
    Kolo(double x, double y, double r)
    {
        srodek = new Punkt(x,y);
        this->r=r;

    }
    void pokaz()
    {
        cout << " r="<<srodek->x;
    }

};

int main()
{
    Kolo k1(10,5,9);

    k1.pokaz();
    return 0;
}

przy odczytywaniu x i y mam błąd związany zprywatnością klasy Punkt, mógłbyś mi to wyjaśnić jeszcze ?

1
komentarz 30 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)
Jaki problem z prywatnoscia? Dokladny error.

Masz na mysli, jesli x i y sa w private, a nie public? Jesli tsk, no to tylko i wylacznie klasa ma do nich dostep, czy tam funkcje wewnatrz klasy, ale nie sam obiekt. Dlstego musisz napisac gettery, zeby moc pobrac wartosci x i y
komentarz 30 maja 2020 przez Dynamic Bywalec (2,910 p.)
Dostaje wlasnie komunikat że x i y sa prywatne, moglbys mi napisac przyklad takiego getera w klasie kolo ktory pobiera dane z klasy punkt ? Bo w twoim programie nie zauważyłem takiego getera
1
komentarz 30 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)
A czemu ma byc on w klasie kolo, skoro chcesz pobrac informacje z obiektu klasy punkt? Sprobuj sam, jak sama nazwa mowi getter cos zwraca, wiec slowem kluczowym jest return

Podobne pytania

0 głosów
1 odpowiedź 441 wizyt
0 głosów
1 odpowiedź 163 wizyt
pytanie zadane 21 lipca 2020 w C i C++ przez KumberTwo Dyskutant (8,270 p.)
0 głosów
0 odpowiedzi 168 wizyt
pytanie zadane 20 października 2019 w Nasze poradniki przez oracledev Użytkownik (620 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...