Benvenuto!
Accedi
o
registrati
.
16-12-2019, 09:36:05
Home
CDL Informatica
UniCT
CEA
Prof
Help
Search
Calendar
Login
Register
Forum Informatica Unict
»
LAUREA TRIENNALE (D.M. 270/04)
»
III anno - Materie a scelta (crediti liberi)
»
LAP 1: programmazione C/C++ 6 CFU
(Moderator:
corrado santoro
) »
Overloading operatore += con oggetto template
Pages: [
1
]
Go Down
« precedente
successivo »
Print
Author
Topic: Overloading operatore += con oggetto template (Read 5700 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Blonic
Forumista
Offline
Gender:
Posts: 868
Overloading operatore += con oggetto template
«
on:
14-02-2013, 19:43:32 »
Salve sto lavorando ad uno stack di generici tipi T e volevo effettuare l'overload dell'operatore += che aggiunge allo stack l'elemento indicato. Il codice che ho scritto non funziona. La cosa che voglio fare si può fare? Se sì come? Qualcuno mi sa aiutare? Grazie!
Code:
#include<iostream>
using namespace std;
template <class T> class Stack{
T * elementi;
int max, testa, coda;
public:
Stack(int m) {max = m; testa=0; coda=0;};
~Stack() {delete [] elementi;};
Stack<T> & operator+=(T & elem); //Stack+=T; pusha T sullo stack
template <class T1> friend ostream & operator<<(ostream & out, Stack<T1> &s);
};
template <class T> Stack<T> & Stack<T>::operator+=(T & elem){
coda++;
elementi[coda] = elem;
return *this;
}
template <class T> ostream & operator<<(ostream & out, Stack<T> &s){
out<<"prova";
return out;
}
main(){
Stack<float> s(10);
cout<<s<<endl;
s+=5.0;
cout<<s<<endl;
system("pause");
}
Logged
Shin
Forumista
Offline
Gender:
Posts: 822
Io sono ciò che sono per ciò che siamo tutti
Re:Overloading operatore += con oggetto template
«
Reply #1 on:
14-02-2013, 21:41:14 »
Il "problema" (che poi non è proprio un problema) sta qui:
Code:
Stack<T> & operator+=(T & elem);
perchè mettendo "T
&
elem" il metodo si aspetta un
riferimento a T
, ma tu nel main non passi un riferimento a T (nel tuo esempio T sarà un float) ma un direttamente un valore numerico (nel tuo esempio 5,0 che non ha alcun riferimento perchè non è allocato in memoria.
Quindi o cambi il metodo in:
Code:
Stack<T> & operator+=(T elem);
e quindi mettendo che prende in input "T elem" al posto di "T & elem",
oppure
nel main metti qualcosa come:
Code:
float prova = 5.0f;
s+=prova;
al posto di:
Code:
s+=5.0;
Logged
"Il peggiore analfabeta è l’analfabeta politico. Egli non sente, non parla, nè s’importa degli avvenimenti politici. Egli non sa che il costo della vita, il prezzo dei fagioli, del pesce, della farina, dell’affitto, delle scarpe e delle medicine dipendono dalle decisioni politiche.
L’analfabeta politico è così somaro che si vanta e si gonfia il petto dicendo che odia la politica.
Non sa, l’imbecille, che dalla sua ignoranza politica nasce la prostituta, il bambino abbandonato, l’assaltante, il peggiore di tutti i banditi,
che è il politico imbroglione, il mafioso corrotto, il lacchè delle imprese nazionali e multinazionali."
(
Bertolt Brecht
)
Collettivo SDAI
:
collettivosdai.altervista.org
,
facebook
.
Movimento Studentesco Catanese
:
www.movimentostudentesco.org
https://github.com/ShinDarth
http://shinworld.altervista.org
http://www.openprogrammers.it
LinuxMint
user.
havoc
Apprendista Forumista
Offline
Gender:
Posts: 224
Re:Overloading operatore += con oggetto template
«
Reply #2 on:
15-02-2013, 12:08:59 »
O li metti entrambi (con reference e senza)
Code:
Stack<T>& operator+=(T& elem);
Stack<T>& operator+=(T elem);
Logged
http://xkcd.com/435/
Blonic
Forumista
Offline
Gender:
Posts: 868
Re:Overloading operatore += con oggetto template
«
Reply #3 on:
15-02-2013, 12:13:12 »
Vi ringrazio per le informazioni! Quindi vediamo se ho capito bene, la differenza fra questo
Code:
float prova = 5.0f;
s+=prova;
e questo
Code:
s+=5.0;
è che nel primo caso la variabile è un oggetto nel secondo è una costante, per cui in quest'ultimo caso non esiste un riferimento ad essa?
«
Last Edit: 15-02-2013, 12:29:10 by Stai Zitto
»
Logged
Shin
Forumista
Offline
Gender:
Posts: 822
Io sono ciò che sono per ciò che siamo tutti
Re:Overloading operatore += con oggetto template
«
Reply #4 on:
15-02-2013, 14:19:17 »
Quote from: Stai Zitto on 15-02-2013, 12:13:12
Vi ringrazio per le informazioni! Quindi vediamo se ho capito bene, la differenza fra questo
Code:
float prova = 5.0f;
s+=prova;
e questo
Code:
s+=5.0;
è che nel primo caso la variabile è un oggetto nel secondo è una costante, per cui in quest'ultimo caso non esiste un riferimento ad essa?
nell'ultimo caso non esiste un riferimento perchè non il valore "5.0" non è presente da nessuna parte in memoria.
Quote from: havoc on 15-02-2013, 12:08:59
O li metti entrambi (con reference e senza)
Code:
Stack<T>& operator+=(T& elem);
Stack<T>& operator+=(T elem);
buona idea!
Logged
"Il peggiore analfabeta è l’analfabeta politico. Egli non sente, non parla, nè s’importa degli avvenimenti politici. Egli non sa che il costo della vita, il prezzo dei fagioli, del pesce, della farina, dell’affitto, delle scarpe e delle medicine dipendono dalle decisioni politiche.
L’analfabeta politico è così somaro che si vanta e si gonfia il petto dicendo che odia la politica.
Non sa, l’imbecille, che dalla sua ignoranza politica nasce la prostituta, il bambino abbandonato, l’assaltante, il peggiore di tutti i banditi,
che è il politico imbroglione, il mafioso corrotto, il lacchè delle imprese nazionali e multinazionali."
(
Bertolt Brecht
)
Collettivo SDAI
:
collettivosdai.altervista.org
,
facebook
.
Movimento Studentesco Catanese
:
www.movimentostudentesco.org
https://github.com/ShinDarth
http://shinworld.altervista.org
http://www.openprogrammers.it
LinuxMint
user.
Blonic
Forumista
Offline
Gender:
Posts: 868
Re:Overloading operatore += con oggetto template
«
Reply #5 on:
15-02-2013, 14:34:32 »
Ho capito, grazie mille!
Logged
havoc
Apprendista Forumista
Offline
Gender:
Posts: 224
Re:Overloading operatore += con oggetto template
«
Reply #6 on:
18-02-2013, 12:11:03 »
In ogni caso va bene come esercizio, ma nella pratica sconsiglio l'overload di operatori quando possano creare problemi di leggibilità del codice.
Il C++ è un linguaggio estremamente potente ma da grandi poteri derivano grandi responsabilità!
Come disse il creatore del C++:
Quote
C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off.
Logged
http://xkcd.com/435/
Blonic
Forumista
Offline
Gender:
Posts: 868
Re:Overloading operatore += con oggetto template
«
Reply #7 on:
18-02-2013, 12:21:22 »
Come pensiero è correttissimo però a mio parere il significato di
Code:
T t;
Stack <T> s;
s+=t;
è molto intuitivo, fra l'altro la stessa cosa identica c'era in un esercitazione del prof, per aggiungere un punto (classe Point) al percorso (classe Path)
Logged
havoc
Apprendista Forumista
Offline
Gender:
Posts: 224
Re:Overloading operatore += con oggetto template
«
Reply #8 on:
18-02-2013, 15:19:26 »
La davo come regola generale, perché in questo periodo sto leggendo "the practice of programming" di Kernighan e Pike, e nel primo capitolo tratta appunto la leggibilità del codice.
Poi è buona norma usare i nomi classici quando si implementano strutture o algortmi ben noti, e considerando la singola linea è sicuramente più leggibile s.push(5) rispetto a s+= 5.
Poi è risaputo che io sono di una pignoleria mostruosa, e inoltre nella mia carriera ho visto codice in C++ da far paura
Logged
http://xkcd.com/435/
Blonic
Forumista
Offline
Gender:
Posts: 868
Re:Overloading operatore += con oggetto template
«
Reply #9 on:
18-02-2013, 16:29:43 »
La pignoleria è una qualità per un informatico ed esprimere le proprie opinioni è sempre giusto.
Quel libro deve essere interessante, un giorno gli darò un occhiata!
Logged
Pages: [
1
]
Go Up
Print
« precedente
successivo »
Jump to:
Please select a destination:
-----------------------------
Area Ufficiale
-----------------------------
=> Annunci Ufficiali
=> Segreteria Didattica
=> Aiuto, proposte e commenti
=> Stages e progetti finali
=> C.O.F. Centro Orientamento e Formazione
=> Messaggi (d)agli amministratori del forum
-----------------------------
LAUREA TRIENNALE (D.M. 270/04)
-----------------------------
=> I anno
===> Architettura degli Elaboratori, 9 CFU
===> Elementi di Analisi Matematica, 12 CFU
===> Fondamenti di Informatica, 9 CFU
===> Matematica Discreta, 12 CFU
===> Programmazione 1, 9 CFU
===> Programmazione 2, 9 CFU
=> II anno
===> Algoritmi, 9 CFU
===> Basi di Dati, 9 CFU
===> Fisica, 9 CFU
===> Ingegneria del Software, 9 CFU
===> Inglese, 3 e 6 CFU
===> Interazione e Multimedia, 9 CFU
===> Sistemi Operativi, 9 CFU
=> III anno
===> Calcolo Numerico, 6 CFU
===> Formazione Numerica, 6 CFU
===> Introduzione all'Analisi dei Dati, 9 CFU
===> Metodi Matematici e Statistici, 6 CFU
===> Reti di Calcolatori, 9 CFU
===> Tecniche di Programmazione Concorrente e Distribuita, 9 CFU
===> Teoria dell'Informazione e Crittografia, 9 CFU
=> III anno - Materie a scelta (crediti liberi)
===> Computer Forensics, 6 CFU
===> Computer Graphics, 9 CFU
===> Digital Game Development, 6 CFU
===> GPGPU/CUDA, 6 CFU
===> Informatica Musicale, 6 CFU
===> LAP 1: programmazione C/C++ 6 CFU
===> LAP 2: Programmazione Android, 6 CFU
===> Sistemi Centrali, 6 CFU
===> Startup d'impresa e Modelli di Business, 6 CFU
===> Internet Security 9 CFU
===> Social Media Management, 6 CFU
=> Corsi disattivati - Vecchio curriculum
===> E-Commerce, 6 CFU
===> Legislazione Informatica, 6 CFU
===> Teoria della Computabilità, 9 CFU
-----------------------------
LAUREA MAGISTRALE
-----------------------------
=> I ANNO
===> Intelligenza Artificiale e Lab, 9 CFU
===> Algoritmi e Complessità, 9 CFU
===> Computer Vision, 9 CFU
===> Crittografia, 9 CFU
===> Fondamenti e Linguaggi per la Programmazione Distribuita
===> Inglese Scientifico, 3 CFU
===> Metodi analitici per l'informatica, 6 CFU
===> Metodi Matematici per l'Ottimizzazione (Corso Integrato), 12 CFU
===> Multimedia, 9 CFU
===> Sicurezza dei Sistemi Informatici 9 CFU
===> Computer Security, 9 CFU
=> II ANNO
===> Machine Learning 6 CFU
===> Teoria della Computabilità, 9 CFU
===> Analisi e Gestione dei Dati, 9 CFU
===> Compilatori, 9 CFU
===> Computazione Naturale e BioIspirata, 6 CFU
===> Introduzione alla Bioinformatica, 9 CFU
===> Linguaggi Formali e Applicazioni, 9 CFU
===> Logica Computazionale, 9 CFU
===> P2P & Wireless Networks, 9 CFU
===> Pattern Recognition, 9 CFU
===> Sistemi Distribuiti, 9 CFU
===> Sistemi dedicati e laboratorio, 9 CFU
===> Web Reasoning
=> Corsi disattivati - Vecchio curriculum
===> Fisica moderna per l'informatica, 6 CFU
===> Linguaggi di Programmazione, 9 CFU
===> Protocolli di Rete
===> Teoria dei Codici, 6 CFU
-----------------------------
Vecchi ordinamenti ad esaurimento
-----------------------------
=> Laurea Triennale (D.M. 509/00)
===> Algoritmi 1
===> Algoritmi 2
===> Basi Teoriche dell'Informatica
===> Economia Aziendale
===> Fisica 1, 6 CFU
===> Fisica 2, 6 CFU
===> Fisica 3
===> Formazione Analitica 1
===> Formazione Analitica 2
===> Formazione Discreta 1
===> Formazione Discreta 2
===> J2ME
===> Lab. Amministrazione di Sistemi
===> Laboratorio di Interazione
===> Modelli Matematici
===> Multimedia per Dispositivi Mobile
===> Progetto Software
===> Reti 1, 6 CFU
===> Sicurezza dei Sistemi Informatici 1
===> Sistemi Distribuiti 1
===> Teoria dei Grafi
===> Usabilità ed Estetica del Web
===> Web Programming
=> Laurea Specialistica (D.M. 509/00)
===> Algoritmi 3
===> Analisi Numerica
===> Complessità
===> Computabilità
===> Data analysis e management
===> Ingegneria del software 2
===> Linguaggi Formali
===> Metodi algoritmici per l'ottimizzazione combinatoria
===> Programmazione Funzionale
===> Reti di Calcolatori 2
===> Ricerca Operativa
===> Sistemi Distribuiti 2
-----------------------------
Dottorandi
-----------------------------
=> Wall
=> Events
-----------------------------
Area Studenti
-----------------------------
=> Agorà
=> L'angolo del tecnico
=> Il Mercatino degli studenti
=> Software
===> -vecchia catalogazione [sarà rimossa a breve]-
=====> Proprietario
=====> Free Software
=====> Open Source
===> Approfondimenti
===> News
===> Studio
===> Videogiochi
===> Networking e telecomunicazioni
===> Sviluppo
===> Ufficio e produttività
===> Sistemi Operativi
=====> Microsoft Windows
=====> GNU/Linux, Unix e BSD
=====> Mac OS X
=====> Windows Phone
=====> Android
=====> iOS
=====> Altri
===> Eventi, conferenze, concorsi
=> Microsoft Student Partner - Avvisi e informazioni
=> ERASMUS/borse di studio internazionali
Caricamento in corso...