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

Przeciązenie operatorów (C++)

0 głosów
787 wizyt
pytanie zadane 28 lipca 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
Czy przeciązenie operatów występuję tylko i wyłącznie w programowaniu obiektowym (mam tu na myśli tylko w klasach) ?

Czy jest szansa aby wykorzystać to jako zwykłą funkcje, a nie składową ?

3 odpowiedzi

+1 głos
odpowiedź 28 lipca 2018 przez Knayder Nałogowiec (37,640 p.)
wybrane 30 lipca 2018 przez Sic
+1 głos
odpowiedź 29 lipca 2018 przez Gramad Obywatel (1,660 p.)
Tak jak pokazał poprzednik, operatory można przeciążać także w strukturach. Ale tylko tych w języku C++!!
W języku C w ogóle nie jest możliwe przeciążanie operatorów, tak samo jak nie jest możliwe tworzenie metod w strukturach(można to objeść tworząc atrybut w strukturze będący wskaźnikiem na funkcje zob. link: https://stackoverflow.com/questions/17052443/c-function-inside-struct)
komentarz 29 lipca 2018 przez RafalS VIP (122,820 p.)

także w strukturach

Nie wprowadzajmy niepotrzebnego zamieszania. Struktura od klasy różni się tylko domyślnym modyfikatorem dostępu składowych i domyślnym typem dziedziczenia. Jeśli da się dla klasy to da się też dla struktury :P

komentarz 29 lipca 2018 przez Gramad Obywatel (1,660 p.)
Jesteś pewny? A co jeśli chodzi o dziedziczenie wielobazowe albo o przyjaźń?
komentarz 29 lipca 2018 przez RafalS VIP (122,820 p.)

Oświeć mnie przykładem albo artykułem, bo nie spotkałem się z innymi różnicami poza tymi które podałem.

class B;
struct A {
	friend class B;
	int a = 100;
private:
	static const int number = 10;
};

struct B {
	int b = A::number;
};

struct C: A,B {
	int b = a;
};

 

komentarz 29 lipca 2018 przez Gramad Obywatel (1,660 p.)
Nie mam zamiaru Cię "oświecać". Po prostu pytałem czy jesteś pewny tego stwierdzenia, bo nigdy się nie spotkałem z takowym.
komentarz 29 lipca 2018 przez RafalS VIP (122,820 p.)
Przepraszam, zrozumiałem, że znasz jakąś różnice :P

https://stackoverflow.com/questions/92859/what-are-the-differences-between-struct-and-class-in-c

Najbardziej plusowana odpowiedz tak mówi + w komentarzach nikt nie podważył zdania = 98% szansy na prawde :P
komentarz 29 lipca 2018 przez criss Mędrzec (172,570 p.)
Coś takiego jak struktura w c++ w ogóle nie istnieje. Słowo kluczowe `struct` służy do deklaracji/definicji klasy, ale domyślnie mamy wtedy public zamiast private.
+1 głos
odpowiedź 29 lipca 2018 przez RafalS VIP (122,820 p.)
edycja 29 lipca 2018 przez RafalS

Tak i jest to w niektórych przypadkach konieczne. Np Gdy chcemy zdefiniować operacje gdy po lewej stronie stoi typ wbudowany a po prawej klasa:

struct A {
	int number = 10;
};

int operator+(int lhs, const A& rhs) {
	return lhs + rhs.number;
}

int main() {
	cout << 1 + A() << endl;
}

Ograniczenie z typami wbudowanymi jest jedynie takie, że nie możesz nadpisać dla nich operatorów już istniejących, czyli np double + int.

Drugi przypadek jest wtedy gdy po lewej stronie stoi klasa ale nie nasza i nie możemy jej zmodyfikować. Klasyczny przykład to wypisywanie obiektów za pomocą cout (std::ostream):

struct A {
	int number = 10;
};
ostream& operator<<(ostream& out, const A& a) {
	return out << a;
}
int main() {
	cout << A() << endl;
}

Podobne pytania

0 głosów
1 odpowiedź 514 wizyt
0 głosów
1 odpowiedź 828 wizyt
0 głosów
1 odpowiedź 1,630 wizyt

93,692 zapytań

142,611 odpowiedzi

323,220 komentarzy

63,220 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...