class 类名
{
public:
返回值类型 operator 操作符 (参数列表)
{
操作符的具体运算过程
}
};
例如,使用加法运算符对两个对象进行运算:
a+b;
这条语句等价于:
a.operator + (b);
它表示调用的是对象a的操作符“operator +”,而参数则是对象b。当调用类的重载操作符时,编译器会将调用该操作符的第一个对象作为操作符的调用者,也就是隐含的this指针
// 3.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class Point
{
public:
Point( int x, int y)
: m_nX(x) , m_nY(y)
{
};
//重载赋值操作符“=”,进行赋值操作
void operator = (Point& pt)
{
//判断传递近来的参数是否是这个对象本身
//如果是同一对象,则不赋值操作
if(this != &pt)
{
m_nX = pt.m_nX;
m_nY = pt.m_nY;
}
else
{
cout<<"对象本身!"<<endl;
}
}
//移动点的位置
Point& Move( int x , int y)
{
m_nX += x;
m_nY += y;
//返回对象本身,这一特质就可以利用函数返回值进行链式引用
return *this;
}
private:
int m_nX;
int m_nY;
};
int _tmain(int argc, _TCHAR* argv[])
{
Point pt1(2,4);
Point pt2(0,0);
pt1=pt1;
//链式引用
pt1.Move(1,1).Move(2,4);
return 0;
}
为了满足各个派生类对类的行为进行自定义的需要,c++提供了虚函数的机制。
在基类的函数声明前加上virtual关键字,这个函数就成为虚函数。
代码如下:
// 1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class Human
{
public:
virtual void BuyTicket()
{
cout<<"人买票"<<endl;
}
private:
};
class Teacher : public Human
{
virtual void BuyTicket()
{
cout<<"老师投币买票"<<endl;
}
};
class Student : public Human
{
virtual void BuyTicket()
{
cout<<"学生刷卡买票"<<endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Human* pPassenger = NULL;
pPassenger = new Teacher();
pPassenger->BuyTicket();
delete pPassenger;
pPassenger = new Student();
pPassenger->BuyTicket();
delete pPassenger;
pPassenger = NULL;
return 0;
}