mirror of https://github.com/xfarrow/lasd.git
89 lines
1.9 KiB
C++
89 lines
1.9 KiB
C++
|
#include <iostream>
|
||
|
using namespace std;
|
||
|
|
||
|
template <typename Pippo>
|
||
|
class A;
|
||
|
|
||
|
template <typename Pippo>
|
||
|
ostream& operator<< (ostream& outstr, const A<Pippo>& a);
|
||
|
|
||
|
template <typename Pippo> // Lo chiamo Pippo per far capire che il nome è irrilevante
|
||
|
class A{
|
||
|
public:
|
||
|
Pippo* ptr = nullptr;
|
||
|
uint size;
|
||
|
A(uint size1){
|
||
|
ptr = new Pippo[size1]();
|
||
|
size = size1;
|
||
|
cout << "A new object is created" << endl;
|
||
|
}
|
||
|
~A(){
|
||
|
delete[] ptr;
|
||
|
}
|
||
|
Pippo& operator[](const uint idx) {
|
||
|
return ptr[idx];
|
||
|
}
|
||
|
|
||
|
friend ostream& operator<< <>(ostream& outstr, const A<Pippo>&);
|
||
|
|
||
|
/*
|
||
|
template <typename DataX>
|
||
|
friend ostream& operator<<(ostream&, const A<DataX>&);
|
||
|
*/
|
||
|
};
|
||
|
|
||
|
template <typename Pippo>
|
||
|
ostream& operator<< (ostream& outstr, const A<Pippo>& a) {
|
||
|
for(int i=0;i<a.size;i++) outstr<<a.ptr[i];
|
||
|
return outstr;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
template <typename DataX>
|
||
|
ostream& operator<< (ostream& outstr, const A<DataX>& a) {
|
||
|
for(int i=0;i<a.size;i++) outstr<<a.ptr[i];
|
||
|
return outstr;
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
int main(){
|
||
|
A<char> str(50);
|
||
|
A<int> v(10);
|
||
|
|
||
|
str[1] = 'k';
|
||
|
v[2] = 3;
|
||
|
|
||
|
cout<<str[1]<<endl;
|
||
|
cout<<v[2]<<endl;
|
||
|
cout<<v;
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
NB: per fare l'override della funzione operator<< (e equiv. di operator>>)
|
||
|
ci sono due metodi:
|
||
|
|
||
|
1. Usare quello che non è commentato, ovvero questo programma. (consigliato)
|
||
|
|
||
|
2.
|
||
|
a. Cancellare/commentare righe 4-8
|
||
|
|
||
|
4 template <typename Pippo>
|
||
|
5 class A;
|
||
|
|
||
|
7 template <typename Pippo>
|
||
|
8 ostream& operator<< (ostream& outstr, const A<Pippo>& a);
|
||
|
|
||
|
b. Cancallare/commentare 35-39
|
||
|
|
||
|
35 template <typename Pippo>
|
||
|
36 ostream& operator<< (ostream& outstr, const A<Pippo>& a) {
|
||
|
37 for(int i=0;i<a.size;i++) outstr<<a.ptr[i];
|
||
|
38 return outstr;
|
||
|
39 }
|
||
|
|
||
|
c. e decommentare ciò che è commentato.
|
||
|
|
||
|
Perché? Non lo so.
|
||
|
*/
|