У меня есть класс Directory, который работает с объектами класса File и перегруженными операторами, например:
class Directory
{
std::vector<char> name, timeOfCreation;
std::vector<File> arr;
public:
Directory(std::string);
Directory(const Directory&);
~Directory();
Directory operator += (File);
Directory operator += (Directory);
Directory operator -= (File);
Directory operator ~();
File operator [] (int);
operator int();
friend bool operator % (Directory, File);
friend bool operator % (Directory, Directory);
friend Directory operator + (Directory, Directory);
friend Directory operator - (Directory, Directory);
friend long int operator + (Directory);
friend std::ofstream& operator << (std::ofstream&, Directory);
friend void main();
};
Хорошо, теперь проблема возникает, когда в основном у меня есть
void main()
{
//make object of Directory d
std::cout << d;
}
Программа теперь вызывает оператор int () вместо оператора <<. Таким образом, команда
<code>std::cout <<d действует как std::cout << (int)d
и записывает количество файлов в моем каталоге.
Вот реализации операторов << и int (): </p>
Directory::operator int()
{
return (int)arr.size();
}
std::ofstream& operator << (std::ofstream& out, Directory d)
{
// get the max field widths for three fields
int widthLeft = 0, widthMiddle = 0, widthRight = 10;
std::vector<File>::const_iterator i = d.arr.begin();
for(; i < d.arr.end(); ++i)
{
if((int)d.timeOfCreation.size() > widthLeft)
widthLeft = (int)d.timeOfCreation.size();
if((int)d.name.size() > widthMiddle)
widthMiddle = (int)d.name.size();
}
out<<std::setw(widthLeft)<<"Date & Time of creation";
out<<std::setw(widthMiddle)<<"Name";
out<<std::setw(widthRight)<<"Total Size\n";
return out;
}
Примечание: оператор << еще не закончен, я просто тестирую функцию setw, но она все равно должна записать эту строку. </p>