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

Typ zwracany funkcji jako nazwa klasy

Object Storage Arubacloud
0 głosów
321 wizyt
pytanie zadane 10 marca 2018 w C i C++ przez dasad33 Użytkownik (710 p.)
Na czym polega zwracanie typu zmiennej o nazwie danej klasy? Czemu w Vector Add mamy słowo Vector zamiast np Void albo Int i jakie to niesie ze sobą konsekwencje? Czym jest ten parametr vector o typie Vector(nazwa klasy) i po co on jest tam potrzebny itd. Jakie wartości przyjmują te zmienne typu x.vector oraz out.x itd? Oraz jak zwróci zmienną out o typie Vector to co ona bedzie w końcu w sobie miała? Proszę o wyjasnienie wgl o co tutaj chodzi i jakie akcje tutaj zachodzą i czy nie mógłbym użyć po prostu voida albo jakieś innej funkcji która zwraca wartość? Staram się to zrozumieć wiec prosze o jak najdokładniejsze odpowiedzi. Z góry dziekuję!!!

class Vector
{
   public:
   int x;
   int y;
   
   Vector Add(Vector vector)
    {
        Vector out;
        out.x = x + vector.x;
        out.y = y + vector.y;
        return out;
    }
    void Show(Vector in1)
    {
        cout<<"in1.1=" << in1.x<<" in1.2="<<in1.y<<endl;
        cout<<"in2.1=" << in1.x<<" in1.2="<<in1.y<<endl;
        cout<<"out.1=" << in1.x<<" in1.2="<<in1.y<<endl;
    }
    bool isEqual(Vector vector);
    {
        bool isEqual;
        isEqual = (x == vector.x) && (y == vector.y);
        return isEqual;
    }
};

1 odpowiedź

0 głosów
odpowiedź 10 marca 2018 przez chucksqll Stary wyjadacz (12,930 p.)
1. Polega dokładnie na tym samym co zwracanie innego typu danych, tyle, że w tym przypadku zwracasz obiekt danej klasy np. jeśli chcesz chcesz przeciążyć operator+.

2.Ponieważ chcesz zwrócić obiekt klasy Vector, a nie zmienną o typie np. int.

3. x.vector przyjmuje wartość jaka kryję się za składową  argumentu funkcji.

x.out jest sumą składowej x.vector (argumentu funkcji) oraz x(składowej obiektu, który wywołał tą funkcję).

4. Będzie ona miała w sobie składowe zainicjalizowane wartościami out.x, out.y.

5. Używanie jakiegoś void'a albo int'a mija się z celem w tym przypadku, załóżmy, że chcesz zwrócić w funkcji współrzędne punktu, użyjesz do tego void'a albo int'a? Nawet jeśli byłoby to jakoś możliwe( a nie jest) to zwracał byś wciąż jedną wartość. Tutaj właśnie przychodzi taka klasa Vector, która ma w sobie 2 zmienne, które mogą być współrzędnymi, i bez problemu później możesz je odczytać, odwołując się do składowych tego obiektu.
komentarz 10 marca 2018 przez dasad33 Użytkownik (710 p.)
MHM rozumiem czyli np te obliczenia wyglądały by tak że jak x = 5 i y = 4 to to bedzie tak:

out.x = 5 + 5;

out.y = 4 + 4;

oraz zwróci obiekt tej klasy i bedzie miała wartości out.x oraz out.y?

Jeśli tak to inne pytanie mam. Skoro ma zwrócić obiekt tej klasy to co z samymi wartościami x oraz y. One są potrzebne do zdefiniowania obiektu o ile się nie myle. Np. Tworze klasę zwierzak o parametrach Imie, wiek. Mogę stworzyć więc metodę która stworzy mi ten obiekt zamiast frazy np zwierzak zwierzak1; ? Jeszcze jedno pytanie dotyczące tej funkcji. Czy mogę zamiast np out,y zrobić out.k albo jakąś inną literkę i co się stanie jak mam np out.y oraz out.x to co się stanie jak zrobie cout<<out; ?
komentarz 11 marca 2018 przez chucksqll Stary wyjadacz (12,930 p.)

MHM rozumiem czyli np te obliczenia wyglądały by tak że jak x = 5 i y = 4 to to bedzie tak:

out.x = 5 + 5;

out.y = 4 + 4;

Niekoniecznie.  x i vector.x to 2 różne wartości zapisane na tej samej składowej ale w dwóch różnych obiektach.

Poniżej przykład wyjaśniający:

Vector one(5,6);//zakładam, że masz taki konstruktor zdefiniowany
Vector two(3,1);
Vector three=one.Add(two);
//
Teraz Vector three będzie miał współrzędne tak jak gdybyś napisał

Vector three(8,7);

Mogę stworzyć więc metodę która stworzy mi ten obiekt zamiast frazy np zwierzak zwierzak1

Nie sądzę. Tworzeniem obiektów zajmuje się konstruktor, a nie jakaś funkcja zwracająca np. typ int.

Czy mogę zamiast np out,y zrobić out.k albo jakąś inną literkę i co się stanie jak mam np out.y oraz out.x

Kompilator zgłosi błąd, bo nie masz nigdzie zdefiniowanej takiej składowej o nazwie k, więc nie możesz tak zrobić.

co się stanie jak zrobie cout<<out;

Nie ma lepszego sposobu, niż sprawdzenie samemu.

Podobne pytania

0 głosów
1 odpowiedź 204 wizyt
0 głosów
3 odpowiedzi 798 wizyt
pytanie zadane 2 grudnia 2016 w C# przez PejtaM Użytkownik (550 p.)
0 głosów
1 odpowiedź 242 wizyt

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 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!

...