Both sides previous revisionPrevious revisionNext revision | Previous revision |
cpp:vector_overloading_binary_operators2 [2019/05/16 08:34] – gthanos | cpp:vector_overloading_binary_operators2 [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 |
---|
===== Υπερφόρτωση δυαδικών τελεστών μπορούν να υλοποιηθούν μόνο ως μέλη της κλάσης ===== | ===== Υπερφόρτωση δυαδικών τελεστών μπορούν να υλοποιηθούν μόνο ως μέλη της κλάσης ===== |
| |
Παρακάτω θα δούμε την υπερφόρτωση τελεστών που μπορούν να υλοποιηθούν μόνο ως μέλη της κλάσης. Οι τελεστές περιγράφονται στον παρακάτω πίνακα. | Σε αυτή την ενότητα, θα δούμε παραδείγματα υπερφόρτωσης, τα οποία μεταβάλλουν τον αριστερό τελεστέο και μπορούν να υλοποιηθού __μόνο ως μέλη της κλάσης__. |
| |
^ Τελεστής ^ Αριστερός τελεστέος ^ Δεξιός τελεστέος ^ Περιγραφή (//>σε όλες τις συναρτήσεις υπερφόρτωσης επιστρέφεται μία αναφορά στον αριστερό τελεστέο//) ^ | ^ Τελεστής ^ Αριστερός τελεστέος ^ Δεξιός τελεστέος ^ Περιγραφή (//>σε όλες τις συναρτήσεις υπερφόρτωσης επιστρέφεται μία αναφορά στον αριστερό τελεστέο//) ^ |
| %%=%% | //Vector// | //Vector// | Ο αριστερός τελεστέος ισούται με τον δεξιό τελεστέο. | | | %%=%% | //Vector// | //Vector// | Ο αριστερός τελεστέος γίνεται ίσος με τον δεξιό τελεστέο. Επιστρέφεται μία αναφορά στο τρέχον αντικείμενο. | |
| %%[ ]%% | //Vector// | //int// | Επιστρέφει μία αναφορά στο **i**-στο στοιχείο του //Vector//, **i** η θέση που προσδιορίζεται από τον δεξιό τελεστή. | | | %%[ ]%% | //Vector// | //int// | Επιστρέφει μία αναφορά στο **i**-στο στοιχείο του //Vector//, **i** η θέση που προσδιορίζεται από τον δεξιό τελεστή. | |
| %%+=%% | //Vector// | //Vector// | Σε κάθε στοιχείο του αριστερού τελεστέου προστίθεται το αντίστοιχο στοιχείο του δεξιού τελεστέου | | | %%+=%% | //Vector// | //Vector// | Σε κάθε στοιχείο του αριστερού τελεστέου προστίθεται το αντίστοιχο στοιχείο του δεξιού τελεστέου. Επιστρέφεται μία αναφορά στο τρέχον αντικείμενο. | |
| %%+=%% | //Vector// | //int// | Σε κάθε στοιχείο του αριστερού τελεστέου προστίθεται ο δεξιός τελεστέος | | | %%+=%% | //Vector// | //int// | Σε κάθε στοιχείο του αριστερού τελεστέου προστίθεται ο δεξιός τελεστέος | |
| %%-=%% | //Vector// | //Vector// | Σε κάθε στοιχείο του αριστερού τελεστέου αφαιρείται το αντίστοιχο στοιχείο του δεξιού τελεστέου | | | %%-=%% | //Vector// | //Vector// | Σε κάθε στοιχείο του αριστερού τελεστέου αφαιρείται το αντίστοιχο στοιχείο του δεξιού τελεστέου. Επιστρέφεται μία αναφορά στο τρέχον αντικείμενο. | |
| %%-=%% | //Vector// | //int// | Σε κάθε στοιχείο του αριστερού τελεστέου αφαιρείται ο δεξιός τελεστέος | | | %%-=%% | //Vector// | //int// | Σε κάθε στοιχείο του αριστερού τελεστέου αφαιρείται ο δεξιός τελεστέος. Επιστρέφεται μία αναφορά στο τρέχον αντικείμενο. | |
| %%*=%% | //Vector// | //Vector// | Κάθε στοιχείο του αριστερού τελεστέου πολλαπλασιάζεται με το αντίστοιχο στοιχείο του δεξιού τελεστέου και το αποτέλεσμα αποθηκεύεται στο στοιχείο του αριστεροού τελεστέου. | | | %%*=%% | //Vector// | //Vector// | Κάθε στοιχείο του αριστερού τελεστέου πολλαπλασιάζεται με το αντίστοιχο στοιχείο του δεξιού τελεστέου και το αποτέλεσμα αποθηκεύεται στο στοιχείο του αριστερού τελεστέου. Επιστρέφεται μία αναφορά στο τρέχον αντικείμενο. | |
| %%*=%% | //Vector// | //int// | Κάθε στοιχείο του αριστερού τελεστέου πολλαπλασιάζεται με τον δεξιό τελεστέο και το αποτέλεσμα αποθηκεύεται στο στοιχείο του αριστεροού τελεστέου. | | | %%*=%% | //Vector// | //int// | Κάθε στοιχείο του αριστερού τελεστέου πολλαπλασιάζεται με τον δεξιό τελεστέο και το αποτέλεσμα αποθηκεύεται στο στοιχείο του αριστερού τελεστέου. Επιστρέφεται μία αναφορά στο τρέχον αντικείμενο.| |
| %%/=%% | //Vector// | //int// | Κάθε στοιχείο του αριστερού τελεστέου διαιρείται με τον δεξιό τελεστέο και το αποτέλεσμα της ακέραιας διαίρεσης αποθηκεύεται στο στοιχείο του αριστερού τελεστέου. | | | %%/=%% | //Vector// | //int// | Κάθε στοιχείο του αριστερού τελεστέου διαιρείται με τον δεξιό τελεστέο και το αποτέλεσμα της ακέραιας διαίρεσης αποθηκεύεται στο στοιχείο του αριστερού τελεστέου. Επιστρέφεται μία αναφορά στο τρέχον αντικείμενο. | |
| %% %=%% | //Vector// | //int// | Κάθε στοιχείο του αριστερού τελεστέου διαιρείται με τον δεξιό τελεστέο και το υπόλοιπο της ακέραιας διαίρεσης αποθηκεύεται στο στοιχείο του αριστερού τελεστέου. | | | %% %=%% | //Vector// | //int// | Κάθε στοιχείο του αριστερού τελεστέου διαιρείται με τον δεξιό τελεστέο και το υπόλοιπο της ακέραιας διαίρεσης αποθηκεύεται στο στοιχείο του αριστερού τελεστέου. Επιστρέφεται μία αναφορά στο τρέχον αντικείμενο. | |
| %%<<=%% | //Vector// | //int// | Τα στοιχεία του αριστερού τελεστέου ολισθένουν αριστερά κατά το μέγεθος του δεξιού τελεστέου. | | | %%<<=%% | //Vector// | //int// | Τα στοιχεία του αριστερού τελεστέου ολισθένουν αριστερά κατά τόσα bits όσα προσδιορίζει ο δεξιός τελεστέος. Επιστρέφεται μία αναφορά στο τρέχον αντικείμενο. | |
| %%>>=%% | //Vector// | //int// | Τα στοιχεία του αριστερού τελεστέου ολισθένουν δεξιά κατά το μέγεθος του δεξιού τελεστέου. | | | %%>>=%% | //Vector// | //int// | Τα στοιχεία του αριστερού τελεστέου ολισθένουν δεξιά κατά τόσα bits όσα προσδιορίζει ο δεξιός τελεστέος. Επιστρέφεται μία αναφορά στο τρέχον αντικείμενο.| |
| |
<code cpp Vector.cpp> | <code cpp Vector.hpp> |
#include <iostream> | #include <iostream> |
#include <string> | #include <string> |
#include <cstdlib> | #include <cstdlib> |
using namespace std; | using namespace std; |
| |
| #ifndef _VECTOR_HPP_ |
| #define _VECTOR_HPP_ |
| |
class Vector { | class Vector { |
void print() const; // print vector values to standard output | void print() const; // print vector values to standard output |
void print(string &msg) const; // print vector values to standard output | void print(string &msg) const; // print vector values to standard output |
| |
/* binary operators that don't modify left operand */ | /* binary operators that don't modify left operand */ |
Vector& operator=(const Vector& v); | |
Vector operator+(const Vector& v) const; | Vector operator+(const Vector& v) const; |
Vector operator-(const Vector& v) const; | Vector operator-(const Vector& v) const; |
| |
/* binary operators that modify left operand */ | /* binary operators that modify left operand */ |
| Vector& operator=(const Vector& v); |
Vector& operator+=(const Vector& v); | Vector& operator+=(const Vector& v); |
Vector& operator+=(int a); | Vector& operator+=(int a); |
| |
}; | }; |
| |
| #endif |
| </code> |
| |
| <code cpp Vector.cpp> |
| #include "Vector.hpp" |
| |
Vector::Vector(int length) { | Vector::Vector(int length) { |
return array[pos]; | return array[pos]; |
} | } |
| </code> |
| |
| <code cpp VectorUsage.cpp> |
| #include "Vector.hpp" |
| |
int main() { | int main() { |