P
Danke für dein beispiel!
Ja, jetzt habe ich noch eine Variante gefunden, die * mit + .. + .. + .. identisch ist. In der Tat geht es nur um ein Verständnis vom Overloading:
#include <iostream>
#include <vector>
using namespace std;
class B {
public:
B(const string & n) : name(n) {}
friend ostream & operator<<(ostream & out, const B & b);
private:
string name;
};
ostream & operator<<(ostream & out, const B & b) {
out<< b.name << endl;
return out;
}
class C {
public:
C() {
}
C(const B & b) {
data.push_back(b);
}
void print() const {
for (size_t i=0; i < data.size(); i++) {
cout << data[i] << endl;
}
}
friend const C operator*(int n, const C & a);
friend const C operator+(const C & a, const C & b) ;
friend const C operator*(int n, const B & b) ;
private:
std::vector<B> data;
};
const C operator*(int n, const C & a) {
C c(a);
for (int m=1; m < n; m++) {
c.data.push_back( a.data[0] );
}
return c;
}
const C operator*(int n, const B & b) {
C c;
for (int m=0; m < n; m++) {
c.data.push_back( b );
}
return c;
}
const C operator+(const C & a, const C & b) {
C z(a);
for (size_t i=0; i < b.data.size(); i++) {
z.data.push_back(b.data[i]);
}
return z;
}
int main() {
cout << "hello" << endl;
C a1( C(B("world")) + C(B("world")) + C(B("world")));
cout << "-----" << endl;
a1.print();
cout << "-----" << endl;
C a2( 3 * B("world"));
a2.print();
return 0;
}
Danke für Dein Feedback zum Init-Liste Style, den muss ich beim nächsten Mal umsetzen.