|
C/C++语言程序设计辅导资料十七
一、主题:运算符重载二、学习时间:2021年1月18日-1月24日“不忘初心、牢记使命”主题理论学习:
忠诚是共产党人必须具备的优秀品格。“忠诚印寸心,浩然充两间”的坚毅,“砍头不要紧,只要主义真”的无畏,腹中满是草根而宁死不屈的气节,食指钉入竹签而永不叛党的坚贞,无数先烈用鲜血诠释了对党的忠诚。对党忠诚必须是纯粹的、无条件的,是政治标准、更是实践标准,鲜明体现在坚决贯彻党中央决策部署上。
摘选自《在第十九届中央纪律检查委员会第二次全体会议上的讲话》三、知识脉络:
第12章 类与对象
12.1 运算符重载规则与成员函数实现运算符重载
12.2 友元函数实现运算符重载四、学习要求:
理解运算符重载的意义
掌握运算符重载规则
掌握运算符重载三种实现方法
掌握成员函数实现运算符重载
掌握普通函数实现运算符重载
理解运算符重载三种实现方法的区别
掌握友元函数实现重载运算符五、重点难点:
成员函数运算符重载
友元函数运算符重载六、主要内容:
1.理解运算符重载
使用运算符对各种数据进行操作,高效快捷且清晰易懂。
如果运算符也能作用于各种类对象,会使代码简洁而优雅。2.运算符重载规则
重载运算符函数可以对运算符作出新的解释,原有基本语义不变:
不能创建新的运算符
不能改变运算符的优先级和结合性
不能改变运算符所需要的操作数
不能改变该运算符用于基本类型变量时的含义
可以重载大部分已有的运算符
特殊的运算符不允许被重载,比如 . :: .* ?: sizeof #等
不必重载的运算符,比如 = &3.成员函数重载运算符
语法形式
类型 类名 :: operator op ( 参数表 )
{
// 相对于该类定义的操作
}
何时用成员函数重载算符?
当一元运算符的操作数,或者二元运算符的左操作数是该类的一个对象时,重载运算符函数为成员函数。
当一个运算符的操作需要修改类对象状态时,应该以成员函数重载。4.友元函数重载运算符
友元函数重载运算符常用于运算符的左右操作数类型不同的情况。5.举例
class Complex //定义Complex类
{ public:
Complex( ){dReal=0;dImag=0; } //定义构造函数
Complex(double r, double i) //重载构造函数
{ dReal = r; dImag = i; }
Complex operator + ( const Complex &c2); //两个复数相加函数
Complex operator + (double d); //复数和实数相加函数
void print( )const;
//友元函数重载+与-
friend Complex operator+( double d, const Complex &c) ;
friend Complex operator-( const Complex &c1, const Complex &c2) ;
friend Complex operator-( const Complex &c1) ;
private:
double dReal; double dImag; //实部与虚部
};//成员函数实现
Complex Complex::operator + (const Complex &c2){
return Complex ( dReal+c2.dReal, dImag+c2.dImag); }
Complex Complex::operator + (double d) {
return Complex ( dReal+d, dImag); }
void Complex::print( )const {
cout << '(' << dReal << ", " << dImag << ')' << endl; }//友元函数实现
Complex operator+( double d, const Complex &c) {
return Complex ( d + c. dReal, c.dImag); }
Complex operator-( const Complex &c) {
return Complex (-c. dReal, -c.dImag); }
Complex operator-( const Complex &c1 ,const Complex &c2) {
return Complex (c1. dReal -c2. dReal, c1. dImag -c2.dImag); }int main( ){
Complex c0,c1(-3,4),c2(1,-10);
double d1=5.5, d2=0.5;
d1= d1 + d2; //内部定义的+操作
c0 = c1+c2; cout << "c1 + c2 = "; //c1.operator +(c2)
c0.print( );
c0 = c1 + d1; cout << "c1 + d1 = "; //c1.operator +(d)
c0.print( );
c0 = d1+ c1; cout << "d1 + c1 = "; //operator +(d, c1)
c0.print( );
c0 = c1-c2; cout << "c1 - c2 = "; //operator -(c1, c2)
c0.print( );
c0 = -c2; cout << " - c2 = "; //operator -( c2)
c0.print( ); return 0;
}运行结果:
c1 + c2 = (-2, -6)
c1 + d1 = (3, 4)
d1 + c1 = (3, 4)
c1 - c2 = (-4, 14)
- c2 = (-1, 10)七、习题:
1.下列关于运算符重载的描述中, 正确的是( ) 。
A.运算符重载可以改变运算符的操作数的个数
B.运算符重载可以改变优先级和结合性
C.运算符重载可以改变该运算符用于基本类型变量时的含义
D.以上说法都不对
答案:D2.在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是( )。
A.作为友元函数重载的1元运算符
B.作为成员函数重载的1元运算符
C.作为友元函数重载的2元运算符
D.作为成员函数重载的2元运算符
答案:B3.下列运算符不能用友元函数重载的是( )。
A.+
B.=
C.++
D.<<
答案:B
4.友元运算符obj1>obj2被C++编译器解释为( )。
A.operator>(obj1,obj2)
B.>(obj1,obj2)
C.obj2.operator>(obj1)
D.obj1.oprator>(obj2)
答案:A
5.如果表达式a+b中的"+"是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为( )。
A.a.operator+(b)
B.b.operator+(a)
C.operator+(a,b)
D.operator(a+b)
答案:A
6.如果表达式a++中的"++"是作为普通函数重载的运算符,若采用运算符函数调用格式,则可表示为( )。
A.a.operator++()
B.operator++(a)
C.operator++(a,1)
D.operator++(1,a)
答案:C7.如果表达式a==b中的"=="是作为T类重载的运算符,若采用运算符函数调用格式,则可表示为( )。
A.a.operator==(b)
B.b.operator==(a)
C.operator==(a,b)
D.operator==(b,a)
答案:A
本内容由易百教育整理发布
网址www.openhelp100.com
QQ 515224986
|
|