c++ 第4课 运算符重载
- 格式:doc
- 大小:429.50 KB
- 文档页数:8
第4课运算符重载
一、重载“<<”“>>”运算符
1、上节课例子:输出数组元素(04_000_1.cpp)
2、上节课例子:输出容器元素(04_000_2.cpp)
3、(选)容器作函数返回值(04_000_3.cpp)
4、(选)使用引用替代上例(04_000_4.cpp)
二、重载双目运算符“+”
注意:重载双目运算符的函数参数,至少有一个必须是类对象
1、类外重载(04_001.cpp)
---------------------------------
//运算符重载:双目运算符"+",
//其中一个参数必须为类对象
//类外重载
#include <iostream>
#include <vector>
using namespace std;
class test
{
public:
vector <int> a;
public:
test()
{
for(int i=0;i<5;++i)
a.push_back(i+1);
}
void output()
{
for(int i=0;i<a.size();++i)
cout<<a[i]<<endl;
}
void add(int n)
{
for(int i=0;i<a.size();++i)
a[i]=a[i]+n;
}
};
ostream& operator<<(ostream&,test t)
{
t.output();
return cout;
}
test operator+(test t,int n)
{
t.add(n);
return t;
}
int main()
{
test t1;
cout<<t1;
t1=t1+10;
cout<<t1;
return 0;
}
----------------------------------
2、类内重载:省略一个参数(04_002.cpp)
test operator+(int n)
{
test t;
add(n);
t.a=a;
return t;
}
-----------------------------------------------------------
3、类内重载:两个类对象相加(04_002_1.cpp)
test operator+(test t2)
{
test t;
for(int i=0;i<t2.a.size();++i)
a.push_back(t2.a[i]);
t.a=a;
return t;
}。
int main()
{
test t1,t2;
cout<<t1;
t1=t1+t2;
cout<<t1;
return 0;
}
----------------------------------------------------------------------------- 三、重载单目运算符“++”(04_003.cpp)
注意:两个重载函数完全一样,只是其中有一个多一个参数,只是为了区别开两个函数,无其它任何意义。
test operator++(int n)
{
test t;
add(1);
t.a=a;
return t;
}
test operator++()
{
test t;
add(1);
t.a=a;
return t;
}
……
int main()
{
test t1;
cout<<t1;
++t1;
cout<<t1;
return 0;
}
-------------------------------------------------------------------------------
四、类的继承与派生
1、基类(04_004.cpp)
//类的继承与派生
//基类
#include <iostream>
#include <vector>
using namespace std;
class student1
{
protected:
int number;
public:
void input()
{
cout<<"input number:";
cin>>number;
}
void output()
{
cout<<"number:"<<number<<endl;
}
};
ostream& operator<<(ostream&,student1 t)
{
t.output();
return cout;
}
int main()
{
student1 t1;
t1.input();
t1.output();
cout<<t1;
return 0;
}
----------------------------------------
2、继承与派生:子类(04_005.cpp)
class student2:public student1
{
protected:
int score;
public:
void input()
{
cout<<"input number:";
cin>>number;
cout<<"input score:";
cin>>score;
}
void output()
{
cout<<"number:"<<number<<endl;
cout<<"score:"<<score<<endl;
}
};
----------------------------------------------- 3、运算符重载“+”:返回值为数值(04_006.cpp)
float operator+(student2 t)
{
return (score+t.score)/2;
}
};
ostream& operator<<(ostream&,student2 t)
{
t.output();
return cout;
}
int main()
{
student2 t1,t2;
t1.input();
t2.input();
cout<<t1;
cout<<t2;
cout<<"average score:"<<t1+t2<<endl;
return 0;
}
------------------------------------------------ 4、运算符重载“+”:返回值为类对象(04_007.cpp)/* float operator+(student2 t)
{
return (score+t.score)/(float)2;
}*/
student2 operator+(student2 t)
{
student2 temp;
temp.number=0;
temp.score=(score+t.score)/(float)2;
return temp;
}
};。
int main()
{
student2 t1,t2,t3;
t1.input();
t2.input();
t3=t1+t2;
cout<<t1;
cout<<t2;
cout<<t3;
return 0;
}
------------------------------------------------
5、运算符重载“>”:返回值为类对象(04_008.cpp)
bool operator>(student2 t)
{
if(score>t.score)
return true;
else
return false;
}
};。
int main()
{
student2 t1,t2,t3;
t1.input();
t2.input();
if(t1>t2)
cout<<t1;
else
cout<<t2;
return 0;
}。