左移操作符重载
左移操作符不能重载为内部函数,原因在与如果重载为内部函数,则应该放到ostream类中,但是ostream这个类是不允许修改的,所以只能用全局的方式友元函数来重载左移运算符
#include <iostream>
using namespace std;
class Complex
{
friend ostream& operator<<(ostream &out, Complex &c);
friend Complex operator+(int num, Complex &c);
public:
Complex(int a = 0, int b = 0)
{
this->a = a;
this->b = b;
}
void show()
{
printf("%d + %d\n", a, b);
}
private:
int a;
int b;
};
//左移操作符不能重载为内部函数,原因在与如果重载为内部函数,则应该放到ostream类中
//但是ostream这个类是不允许修改的,所以只能用全局的方式友元函数来重载左移运算符
ostream& operator<<(ostream &out, Complex &c)
{
out<<c.a<<"+"<<c.b<<"i";
return out;
}
int main6()
{
Complex c1(1, 2);
//最终形式 operator<< (operator<<(cout, c1), endl);
cout << c1 << endl;
}
函数调用运算符
#include <iostream>
using namespace std;
class Student
{
public:
Student()
{
}
void operator()(int a)
{
printf ("a = %d\n", a);
}
private:
int id;
char *name;
};
int main()
{
Student s;//一个学生对象
//s.operator()(10);
s(10); //s是一个对象,但是可以向函数一样使用=======》函数对象,仿函数
return 0;
}