/*-------------------------------------------------------*/
file obj_test.h:
/*-------------------------------------------------------*/
#ifndef __OBJ_TEST_H
#define __OBJ_TEST_H
#include <vector>
#include <string>
using namespace std;
class obj_test {
public:
obj_test(void);
obj_test(vector<float> samples): _samples(samples) { };
~obj_test(void);
// copy constructor
obj_test(const obj_test& obj);
// assignment operator
obj_test& operator =(const obj_test& rhs);
// + operator
obj_test operator +(const obj_test& rhs);
friend ostream& operator <<(ostream& os, obj_test &test);
friend istream& operator >>(istream &is, obj_test &test);
private:
// temp samples
vector<float> _samples;
};
ostream& operator <<(ostream &os, obj_test &test);
istream& operator >>(istream &is, obj_test &test);
#endif
/* __OBJ_TEST_H */
/*-------------------------------------------------------*/
file obj_test.cpp:
/*-------------------------------------------------------*/
#include "test.h"
obj_test::obj_test(void) {
}
// copy constructor
obj_test::obj_test(const obj_test& obj): _samples(obj._samples) { }
// assignment operator
obj_test& obj_test::operator =(const obj_test& rhs) {
// guard against self-assignment Stanley B. Lippman C++ Primer p.729
if (this!=&rhs) {
_samples=rhs._samples;
}
return *this;
}
obj_test obj_test::operator +(const obj_test& rhs) {
obj_test test;
_samples.insert(_samples.end(),rhs._samples.begin(),rhs._samples.end());
test._samples=_samples;
return test;
}
obj_test::~obj_test(void) {
_samples.clear();
}
ostream& operator <<(ostream& os, obj_test &test) {
os << "samples: " << endl;
copy(test._samples.begin(),test._samples.end(),ostream_iterator<float>(os,"\n"));
return os;
}
istream& operator >>(istream &is, obj_test &test) {
string l;
getline(is,l);
float sample;
while (is >> sample)
test._samples.push_back(sample);
return is;
}
/*-------------------------------------------------------*/
file obj_test_driver.cpp:
/*-------------------------------------------------------*/
#include <iostream>
#include <sstream>
#include "test.h"
using namespace std;
void main() {
vector <float> samples;
samples.push_back(float(1.4));
samples.push_back(float(3));
samples.push_back(float(5.6));
cout << "test obj intialized with vector<float> samples:" << endl << endl;
obj_test test(samples);
cout << test << endl;
stringstream ss;
ss << test;
obj_test test_clone;
ss >> test_clone;
cout << "test clone should be the same with test:" << endl;
cout << test_clone;
getchar();
return;
}
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου