',实现复数大小的比较(以复数的模作为比较标准)(d)重载运算符"[]",实现以下标0引用实部,以下标1引用虚部。(e)设计类型转换函数,实现将Complex转换为double型(取复数的模)。设计主函数测试" />
当前位置:文档之家› c++运算符重载-实例-定义复数类Complex

c++运算符重载-实例-定义复数类Complex

c++运算符重载-实例-定义复数类Complex
c++运算符重载-实例-定义复数类Complex

/*定义复数类Complex,数据成员:实部real,虚部image。为该类

(a)重载运算符"+",实现两个复数相加,复数与实数相加,实数与复数相加。(b)重载前置和后置运算符"++",实现实部和虚部同时加1。

(c)重载运算符'>',实现复数大小的比较(以复数的模作为比较标准)

(d)重载运算符"[ ]",实现以下标0引用实部,以下标1引用虚部。

(e)设计类型转换函数,实现将Complex转换为double型(取复数的模)。设计主函数测试之。

*/

#include

#include

using namespace std;

class Complex

{

public:

Complex(int,int);

intgetreal();

intgetimage();

operator+(Complex &);

operator+(int );

operator++();

bool operator>(Complex &);

int operator[](constint&);

double change();

private:

int real;

int image;

};

Complex::Complex(intr,int i)

{

real=r;

image=i;

}

Complex::getreal()

{

return real;

}

Complex::getimage()

{

return image;

}

Complex::operator +(Complex &o)

{

real+=o.real;

image+=o.image;

}

Complex::operator +(int a)

{

real+=a;

}

Complex::operator ++()

{

real++;

image++;

}

bool Complex::operator>(Complex &o1)

{

if(this->real>o1.real)

return true;

else

return false;

}

int Complex::operator [](constint&index)

{

if(index==0)

return real;

else if(index==1)

return image;

else

{

cout<<"subscript error"<

exit(0);

}

}

double Complex::change()

{

returnstatic_cast(sqrt(real*real+image*image)*0.01)*0.01; }

运算符重载基础概念练习题

运算符重载基础概念练习题 1、下列运算符中, ()运算符在C++中不能重载。 A = B () C :: D delete 2、下列运算符中, ()运算符在C++中不能重载。 A ?: B [] C new D && 3、下列关于C++运算符函数的返回类型的描述中,错误的是()。 A 可以是类类型 B 可以是int类型 C 可以是void类型 D 可以是float类型 4、下列运算符不能用友元函数重载的是()。 A + B = C * D << 5、在重载运算符函数时,下面()运算符必须重载为类成员函数形式。 A + B - C ++ D -> 6、下列关于运算符重载的描述中,正确的是()。 A 运算符重载可以改变运算符的操作数的个数 B 运算符重载可以改变优先级 C 运算符重载可以改变结合性 D 运算符重载不可以改变语法结构 7、友元运算符obj>obj2被C++编译器解释为()。 A operator>(obj1,obj2) B >(obj1,obj2) C obj2.operator>(obj1) D obj1.oprator>(obj2) 8、在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是()。 A operator+有两个参数,operator*有两个参数 B operator+有两个参数,operator*有一个参数 C operator+有一个参数,operator*有两个参数 D operator+有一个参数,operator*有一个参数 9、重载赋值操作符时,应声明为()函数。 A 友元 B 虚 C 成员 D 多态 10、在一个类中可以对一个操作符进行()重载。 A 1种 B 2种以下 C 3种以下 D 多种 11、在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是()。

运算符重载练习题.

运算符重载 一.单项选择题 1.下列运算符中,运算符在C++中不能重载。 A.?: B.+ C. D.<= 解:C++中不能被重载的运算符有:·,一,::,?:。本题答案为A。 2.下列运算符中,运算符在C++中不能重载。 A.&& B.[] C.:: D.new 解:c++中不能被重载的运算符有:·,·+,::,?:。本题答案为c。 3.下列关于运算符重载的描述中,是正确的。 A.运算符重载可以改变操作数的个数 B.运算符重载可以改变优先级 C.运算符重载可以改变结合性 D.运算符重载不可以改变语法结构 解:运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算程的语法结构。本题答案为D。 4.友元运算符objl>obj2被C++编译器解释为。 A.operator>(objl,obj2) B.>(obj1,obj2) C.obj2.operator:>(obj1) D.objl.operator>(obj2) 解:重载为友元函数的运算符的调用形式如下: operator<运算符>(<参数1>,<参数2>) 等价于:<参数1><运算符><参数2> 本题答案为A。 5.现需要对list类对象使用的逻辑运算符“==”重载,以下函数声明是正确的。 A、list & list::operator==(const list &a); B、list list::operator==(const list &a); C、bool & list::operator==(const list &a); D、bool list::operator==(const list &a); 6. 以下类中分别说明了“+=”和“++”运算符重载函数的原型。如果主函数中有定义: fun m,c,d;,那么,执行语句c=m++; 时,编译器把m++解释为: (33) A) c.operator++(m); B) m=operator++(m); C) m.operator++(m); D) operator++(m); class fun { public: .. .. .. fun operator +=(fun ); friend fun operator ++(fun &,int); }; 答案:D 7. 在第33题中,当执行语句d+=m; 时,C++编译器对语句作如下解释: (34) A. d=operator+=(m); B. m=operator+=(d); C. d.operator+=(m); D. m.operator+=(d); 答案:C 8. 设有以下类定义,其中说明了“+”运算符重载函数的原型。这是一个友元函数,当类

实验8--友元函数与运算符重载函数

实验十三 1.实验目的 通过本次实验 (1)理解友元函数与运算符重载函数的概念; (2)学会友元函数的定义与使用方法; (3)掌握运算符重载函数的定义与使用方法; 2.实验要求 (1)编写实验程序 (2)在VC++运行环境中,输入源程序 (3)编译运行源程序 (4)输入测试数据进行程序测试; (5)写出运行结果。 3.实验内容 (1)定义一个复数类,重载“-=”运算符,使这个运算符能直接完成复数的“-=”运算。分别用成员函数与友元函数编写运算符重载函数。在主函数中定义复数对象c1(10,20)、c2(15,30),进行c2-=c1的复数运算,并输出c1、c2的复数值。 参考资料: (1)成员函数 # include class Complex { private: float Real,Image; public: Complex(float r=0,float i=0) { Real=r;Image=i;} void Show(int i) { cout<<"c"< class Complex { private: float Real,Image; public: Complex(float r=0,float i=0) { Real=r;Image=i;} void Show(int i) { cout<<"c"<

运算符重载

运算符重载 例子:复数加,Point 所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能。运算符也可以重载。 运算符重载是对已有的运算符赋予多重含义。 C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类)(一) C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。 (二)C++允许重载的运算符C++中绝大部分的运算符允许重载. 不能重载的运算符只有5个: (1) 成员访问运算符. ???? (2) 作用域运算符∷ (3) 条件运算符?: (4) 成员指针运算符* ????? (5) 编译预处理命令的开始符号# (三) 重载不能改变运算符运算对象(即操作数)的个数。 (四) 重载不能改变运算符的优先级别。 (五) 重载运算符的函数不能有默认的参数,否则就改变了运算符参数的个数,与前面第(3)点矛盾。 (六) 重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。也就是说,参数不能全部是C++的标准类型,以防止用户修改用于标准类型数据的运算符的性质。 (七) 用于类对象的运算符一般必须重载,但有两个例外,运算符“=”和“&”不必用户重载。 ①赋值运算符(=)可以用于每一个类对象,可以利用它在同类对象之间相互赋值。 ②地址运算符&也不必重载,它能返回类对象在内存中的起始地址。 总之,当C++语言原有的一个运算符被重载之后,它原先所具有的语义并没有消失,只相当于针对一个特定的类定义了一个新的运算符。 C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运算符函数的定义与其他函数的定义类似,惟一的区别是运算符函数的函数名是由关键字operator和其后要重载的运算符符号构成的。运算符函数定义的一般格式如下: <返回类型说明符> operator <运算符符号>(<参数表>) {

实验五 运算符重载

实验五运算符重载 【实验目的】 1.进一步了解运算符重载的概念和使用方法。 2.掌握几种常用的运算符重载的方法。 3.了解转换构造函数的使用方法。 4.了解在Visual C++6.0环境下进行运算符重载要注意的问题. 【实验要求】 1.硬件基本配置:Intel PentiumIII以上级别的CPU,大于64MB的内存。 2.软件要求:Window 2000操作系统,Visual Studio 6.0或更高版本开发环境。 3.实验学时:2学时 4.实现实验内容中的题目。 5.写实验报告 【实验内容】 (1)声明一个复数类Complex,重载运算符“+’’,“一”,“*”,“/”使之能用于复数的加、减、乘、除.运算符重载函数作为Complex类的成员函数,重载流提取运算符实现对复数的输出。编程序,分别求两个复数之和、差、积和商并用重载后的流运算符进行输出。 请思考:你编的程序能否用于一个整数与一个复数的算术运算?如4+ (5-2i). (2)声明一个复数类Complex,重载运算符“+“,使之能用于复数的加法运算。 参加运算的两个运算量可以都是类对象.也可以其中有一个是整数,顺序任意。例如, cl+c2, i+cl,cl+i均合法(设i为整数,c1, c2为复数)。 运行程序.分别求两个复数之和、整数和复数之和。 (3)有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,使之能用于矩阵相加。如c=a+b。重载流提取运算符实现对矩阵的输出如:cout<

最新数系的扩充和复数的概念教案

§3.1.1数系的扩充和复数的概念 教案 李 志 文 【教学目标】 知识与技能:1.了解数系的扩充过程;2.理解复数的基本概念 过程与方法:1.通过回顾数系扩充的历史,让学生体会数系扩充的一般性方法. 2.类比前几次数系的扩充,让学生了解数系扩充后,实数运算律均可应用于 新数系中,在此基础上,理解复数的基本概念. 情感态度与价值观: 1、虚数单位的引入,产生复数集,让学生体会在这个过程中蕴含的创 新精神和实践能力,感受人类理性思维的作用以及数与现实世界的联系; 2、初步学会运用矛盾转化,分与合,实与虚等辩证唯物主义观点看待和 处理问题。 【重点难点】 重点: 理解虚数单位i 的引进的必要性及复数的有关概念. 难点:复数的有关概念及应用. 【学法指导】 1、回顾以前学习数的范围扩充过程,体会数系扩充的必要性及现实意义; 2、思考数系扩充后需考虑的因素,譬如运算法则、运算律、符号表示等问题,为本节学习奠定方法基础. 【知识链接】 前两个学段学习的数系的扩充: 但是,数集扩到实数集R 以后,像x 2=-1这样的方程还是无解的,因为在实数范围内,没有一个实数的平方等于负数.联系从自然数到实数系的扩充过程,你能设想一种方法,使这个方程有解吗? Q N Z R 人们在狩猎、采集果实等劳动中,由于计数的需要,就产生了1,2,3,4等数以及表示“没有”的数0.自然数 的全体构成自然数集N 为了表示各种具有相反意义的量以及满足记数的需要,人们又引进了负整,将数系扩充至整数集Z. 为了解决测量、分配中遇到的将某些量进行等分的问题, 人们引进了分数,将数系扩充至有理数集Q. 用方形的边长去度量它的对角线所得的结果,无法用有 理数表示,为了解决这个矛盾,人们又引进了无理数.有 理数集与无理数集合并在一起,构成实数集R . N x 2=-1,x =?

运算符重载题目

二、运算符重载(运算符重载的基本概念、运算符重载方法、运算符重载规则、特殊运算符重载和类型转换) 单选题10道: 1、假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为( B )。 A. AB operator+(AB& a,AB& b) B. AB operator+(AB& a) C. operator+(AB a) D. AB &operator+( ) 2、关于运算符重载,下面的叙述错误的是()。 A.运算符预定义的操作数个数不能改变 B.重载不能改变运算符的优先级顺序 C.参数的类型没有限制 D.尽量使其与原意保持一致 3、在一个类中可以对一个操作符进行(D )重载。 A. 1种 B. 2种以下 C. 3种以下 D. 多种 4、重载赋值操作符时,应声明为(C )函数。 A. 友元 B. 虚 C. 成员 D. 多态 5、要在类对象使用运算符,以下不必被重载的运算符是( A )。 A. [] B. = C. ++ D. -- 6、下列运算符中,不能重载的是(C ) A.new B.() C.::D.&& 7、在表达式x+y*z中,+ 是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是( A )。 A)operator+有两个参数,operator*有两个参数 B)operator+有两个参数,operator*有一个参数 C)operator+有一个参数,operator*有两个参数 D)operator+有一个参数,operator*有一个参数 8、友元运算符obj1>obj2被C++编译器解释为()。 A) operator>(obj1,obj2) B) >(obj1,obj2) C) obj1.operator>(obj2) D) obj2.operator>(obj1) 9、已知某个类的友元函数重载了+=和-,a,b,c是该类的对象,则“a+=b-c”被C++编译器解释为()。 A) operator+=(a,operator-(b,c)) B) a.operator+=(b.operator-(c)) C) operator+=(a,b.operator-(c)) D) a.operator+=(operator-(b,c)) 10、下列运算符中,必须使用成员函数进行重载的是()。 A) == B) = C) >> D) ++ 填空题10道: 1、多数运算符既能作为类的成员函数重载,也能作为类的非成员函数重载,但运算符“[]”只能作为类的函数重载。 2、加法运算符“+”和赋值运算符“=”都重载之后,“+=”也被重载了。 3、单目运算符作为类的成员函数重载时形参。 4、利用成员函数对二元运算符重载时,其右操作数为。 5、重载运算符函数的函数名由关键字引出。 6、运算符的重载归根结底是的重载。 7、后缀自增自减运算符定义时带有一个。

实验十_运算符重载

实验十运算符重载1.实验目的及要求 1)掌握运算符重载的基本概念和方法。 2)熟习几种特殊的运算符的重载。 2.实验内容 1.分析下面的程序,指出程序运行的结果: 1) #include class point{ int x,y; public: point(int vx,int vy){ x=vx; y=vy;} point(){x=0,y=0;} point operator+(point p1) { int px=x+p1.x; int py=y+p1.y; return point(px,py); } point operator-(point p1) { point p; int px=x-p1.x; int py=y-p1.y; return point(px,py); } void print(){cout<

运行结果为: 30,30 Press any key to continue 2)分析下面程序,指出程序运行的结果: #include static int dys[]={31,28,31,30,31,30,31,31,30,31,30,31}; class date { int mo,da,yr; public: date(int m,int d,int y){mo=m;da=d;yr=y;} date(){} void disp() {cout<dys[dt.mo-1]) {day-=dys[dt.mo-1];//cout<

(完整版)复数知识点归纳

精心整理 页脚内容 复数 【知识梳理】 一、复数的基本概念 1、虚数单位的性质 i 叫做虚数单位,并规定:①i 可与实数进行四则运算;②12-=i ;这样方程12-=x 就有解了,解为i x = 2(1①a z =(2例题:注意:三、共轭复数 bi a +与di c +共轭),,,(,R d c b a d b c a ∈-==? bi a z +=的共轭复数记作bi a z -=_,且22_ b a z z +=? 四、复数的几何意义 1、复平面的概念 建立直角坐标系来表示复数的平面叫做复平面,x 轴叫做实轴,y 轴叫做虚轴。显然,实轴上的点都表示实数;除了原点外,虚轴上的点都表示纯虚数。

精心整理 页脚内容 2、复数的几何意义 复数bi a z +=与复平面内的点),(b a Z 及平面向量),(b a OZ =→),(R b a ∈是一一对应关系(复数的实质是有序实数对,有序实数对既可以表示一个点,也可以表示一个平面向量) 相等的向量表示同一个复数 例题:(1)当实数m 为何值时,复平面内表示复数i m m m m z )145()158(22--++-=的点 ①位于第三象限;②位于直线x y =上 (2)复平面内)6,2(=→AB ,已知→→AB CD //,求→ CD 对应的复数 3、复数的模: 向量OZ 的模叫做复数bi a z +=的模,记作z 或bi a +,表示点),(b a 到原点的距离,即=z 22b a bi a +=+,z z = 若bi a z +=1,di c z +=2,则21z z -表示),(b a 到),(d c 的距离,即2221)()(d b c a z z -+-=- 例题:已知i z +=2,求i z +-1的值 五、复数的运算 (1)运算法则:设z 1=a +b i ,z 2=c +d i ,a ,b ,c ,d ∈R ①i d b c a di c bi a z z )()(21+++=+++=± ②i ad bc bd ac di c bi a z z )()()()(21++-=+?+=? ③2221)()()()())(())(d c i a d bc bd ac di c di c di c bi a di c bi a z z +-++=-?+-+=++= (2)几何意义:复数加减法可按向量的平行四边形或三角形法则进行.如图给出 的平行四边形OZ 1ZZ 2可以直观地反映出复数加减法的几何意义,即=+,=-. 六、常用结论 (1)i ,12-=i ,i i -=3,14=i 求n i ,只需将n 除以4看余数是几就是i 的几次 例题:=675i (2)i i 2)1(2=+,i i 2)1(2-=- (3)1)2321(3=±-i ,1)2 321(3-=±i 【思考辨析】 判断下面结论是否正确(请在括号中打“√”或“×”) (1)方程x 2+x +1=0没有解.( )

国家二级C++机试(运算符重载、模板和C++流)模拟试卷7

国家二级C++机试(运算符重载、模板和C++流)模拟试卷7 (总分:58.00,做题时间:90分钟) 一、选择题(总题数:29,分数:58.00) 1.下列关于函数模板的描述中,正确的是( )。 (分数:2.00) A.函数模板是一个实例函数 B.使用函数模板定义的函数没有返回类型 C.函数模板的类型参数与函数的参数相同 D.通过使用不同的类型参数,可以从函数模板得到不同的实例函数√ 解析:解析:函数模板是一系列相关函数的模型或样板,这些函数的源代码相同,只是所针对的数据类型不同。数据类型成了函数模板的参数,所以函数模板是一种参数化类型的函数。 2.有如下函数模板定义: template<typename T1,Typename T2> T1 Fun(T2 n){ return n*5.0;} 若要求以int型数据9作为函数实参调用该模板,并返回一个double型数据,则该调用应表示为( )。 (分数:2.00) A.FUN(9) B.FUN<9> C.FUN<double>[9] √ D.FUN<9>(double) 解析:解析:根据函数模板的定义,在选项C的调用中,把double类型传递给T1,int型传递给T2。 3.下列关于模板的描述中,错误的是( )。 (分数:2.00) A.类模板的成员函数都是模板函数 B.函数模板是一种参数化类型的函数 C.满足一定条件时可以省略模板实参 D.模板形参只能由关键字typename声明√ 解析:解析:同一模板的声明和定义中,模板形参的名字不必相同。每个模板类型形参前面必须带上关键字typename/class,每个非类型形参前面必须带上类型名字。 4.已知主函数中通过如下语句序列实现对函数模板swap的调用: int a[10],b[10]; swap(a,b,10);下列对函数模板swap的声明中,会导致上述语句序列发生编译错误的是( )。 (分数:2.00) A.template<typename T> void swap(T a[],T b[],int size); B.template<typename T> void swap(int size,T a[],T b[]);√ C.template<typename T1,typename T2> void swap(T1 a[],T2 b[],int size}; D.template<class T1,class T2> void swap(T1 a[],T2 b[],int size); 解析:解析:由题目中函数swap(a,b,10)调用语句可知,在对函数模板swap的声明语句中,应将第一、二个参数设为数组变量,第三个参数为整型变量。 5.在定义函数模板或类模板时,开头的保留字是( )。 (分数:2.00) A.typename B.template √ C.class D.typedef 解析:解析:定义函数模板或类模板时,开头的保留字是template。 6.若有函数模板mySwap和一些变量定义如下:( )。template<class T>void mySwap(T x,T y);double d1,d2;int i1,i2;下列对mySwap的调用中,错误的是 (分数:2.00) A.mySwap(i1,i2)

运算符重载知识题

. 《面向对象程序设计》习题 班级:学号:姓名:名单序号:成绩: 第7章运算符重载和多态性 一、选择题(共30分,每题1分) 1.下列运算符中,()运算符在C++中不能重载。 A.?: B.[] C. new D.++ 2.友元重载运算符obj1>obj2被C++编译器解释为()。 A.operator >(obj1,obj2) B.>(obj1,obj2) C.obj2.operator >(obj1) D.obj1.operator >(obj2) 3.重载赋值操作符时,应声明为()函数。 A.友元B.虚C.成员D.多态 4.在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是()。 A. 作为友元函数重载的1元运算符 B. 作为成员函数重载的1元运算符 C. 作为友元函数重载的2元运算符 D. 作为成员函数重载的2元运算符5.在重载一运算符时,若运算符函数的形参表中没有参数,则不可能的情况是()。 A. 该运算符是一个单目运算符。 B. 该运算符函数有一个隐含的参数this。 C. 该运算符函数是类的成员函数。 D. 该运算符函数是类的友元函数。 6. 关于运输符重载,下列表述中正确的是()。 A.C++已有的任何运算符都可以重载 B.运算符函数的返回类型不能声明为基本数据类型

. C.在类型转换符函数的定义中不需要声明返回类型 D.可以通过运算符重载来创建C++中原来没有的运算符 7. C ++流中重载的运算符>>是一个()。 A. 用于输出操作的非成员函数 B. 用于输出操作的成员函数 C. 用于输入操作的非成员函数 D. 用于输入操作的成员函数 8. 若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是()。 A. Data +(Data); B. Data operator+(Data); C. Data +operator(Data); D. operator +(Data, Data); 9. 下列运算符中哪些是不能够被重载的()。 A. .,.*,sizeof,::,?: B. ++,--,new,= = C. new,delete,>=,[ ] D. +,-,=,delete 10. 在名为BigNumber类的类体中对运算符函数double进行如下声明: operator double(BigNumbe); 函数声明中有一个明显的错误,这个错误就是()。 A.参数表中不应该有任何参数 B.缺少对函数返回类型的说明 C.参数声明中缺少参数变量 D.函数声明中缺少函数体 11. 下列关于运算符重载的描述中,正确的是()。 A. 运算符重载成为成员函数时,若参数表中无参数,重载是一元运算符 B. 一元运算符只能作为成员函数重载 C. 二元运算符重载成为非成员函数时,参数表中有一个参数

实验5-运算符重载、继承 ( 1 )

实验五运算符重载、继承 ●实验目的 1、了解类的两种使用方式。 2、学习从现有类派生出新类的方式。 3、了解在派生类中如何使用基类的成员。 4、了解基类成员在派生类中的访问控制。 5、掌握运算符重载的方法。 ●实验内容 1、从类Person中派生出一个教师类,新增的属性有专业(Specialty)、职称(Position)和主讲课程(MajorCourse,一门),并为这些属性定义相应的方法。 [实现要求] Person类的设计如下,请将空白处补充完整。 class Person { string Name; int Age; string Sex; public: void Register(char *name,int age,char *sex) { ; Age=age; Sex=sex; } string GetName() { } string GetSex() { return Sex; } int GetAge() { } void ShowMe() { cout<

//带参数的构造函数去初始化各个成员的值,使其显示运行结果的第一行t.TeacherRegister("张三",40, "f","计算机","副教授","C++"); t.ShowMe(); return 0; } 运行结果如下: XXX m 0 XXX XXX XXX 张三 f 40 计算机副教授C++ [思考问题] ①在Teacher类中是否要需要重新定义ShowMe成员函数?不重新定义ShowMe成员函数能否得到上述要求的运行结果?为什么? 2、从Point类中派生出一个Line类。Line类增加一个数据成员EndPoint,计算线的长度。 [实现提示] Point类可以按下面方式进行设计: class Point{ int x,y; public: Point(int a=0,int b=0){SetPoint(a,b);} void SetPoint(int a,int b); //设置点的坐标值 int GetX(){return x;} int GetY(){return y;} void Print(); //显示点的坐标值 }; Line类增加一个数据成员EndPoint为Point类对象,注意在设计Line类的构造函数时应为其基类和对象成员EndPoint提供形参。 为了检验Line类的功能,主函数按如下方式设计: int main(){ Line line(1,1,10,10); cout<<"Line line:"; line.Print(); cout<<"\n线line的长度:"; cout<

1-1复数的基本概念

§1.1 复数的基本概念 授课要点:复数的定义,复数的代数表示,三角式、指数式及它们与复数几何表示(二维向量)之间的关系 1、 复数的定义: 设有一个有序数对(),a b ,遵从如下的运算法则 加法:()()()11221212,,,a b a b a a b b +=++ 乘法:()(),,(,) a b c d ac bd ad bc =-+ 则称这一有序数对(),a b 为复数,记为α,即 α=(),a b 其中a 为α实部,b 为α的虚部,记为 a =Re α, b =Im α 纯实数a =(),0a ,纯虚数记为b =()0,b ,所以有 α=(),0a +()0,b =a(1,0)+b (0,1) 其中(0,1)即为虚数单位,常记为i. 2、 复数的相等与大小 两个复数相等的充要条件是:实部、虚部分别相等. 复数不能比较大小!这一点可用反证法证明: 假设认为i >0,则在不等式两边同乘以一个大于0的数i ,不等式符号应当不变,即 20i > 即 -1>0,这显然是错误的! 3、 几个特殊的复数: (0,0):(0,0)(,)(,)(0,0)(,)(0,0)a b a b a b +=??=? (1,0):(1,0)(,)(,)a b a b = (0,1):(0,1)(0,1)=(-1,0)=-1 (0,1)是-1的平方根,是虚数单位,记为i =(0,1) 4、 共轭复数:(,)a b α=,* (,)a b α=-互为共轭复数 性质:**()αα=(共轭的共轭等于自己)

*2ααα+=为实数(两个互为共轭的复数相加,结果必为实数) *22a b αα?=+,为非负实数(α的模方) 5、 复数的减法、除法 减法:()()()()a ib c id a c i b d +-+=-+- 除法:2222()()()()a ib a ib c id ac bd bc ad i c id c id c id c d c d ++-+-==+++-++ ↑“分母实数化” 6、 复数的几何表示: (1) 任何一个复数都可以和复平面上的一点对应,将这一点和原点连起来(原点为起 点),形成一个二维矢量,这是一个二维自由向量,即将op 平移后,仍代表同一 矢量(如右图所示) (2) 加法的几何表示(平行四边形法则与三角形法则) γαβ=+ (3) 减法的几何表示:

Student类(友元,运算符重载,继承)综合题

//定义Student类,Date类,类定义与成员函数,实现分离。 //将Student类声明为Date的友元类。Student类需要提前声明。 //Student类的成员函数可以访问Date类的私有成员。 //成员函数:构造函数,构造函数重载,析构函数, //输出函数,求成绩最低者函数,排序函数。 //使用new,delete,动态分配内存。实现班级人数不固定,可以从键盘输入。 //定义Doctor类(研究生)-公共继承于Student类 //增加私有成员:string thesis(论文评价),int sci_value(科研分值) //增加相应的成员函数 //增加友元函数-运算符重载<<,>> //增加成员函数--按照科研分值高低排序 //student.h---头函数,类的定义 #include #include using namespace std; class Student; //提前声明 class Date //定义Date类-存放出生年月日 { friend class Student; //友元类,Student成员函数可以访问Date类的私有成员public: Date(); //无参构造函数 Date(int,int,int); //有参构造函数 ~Date(); //析构函数 //protected: //这里是保护成员//这里是VC6.0的原因 int year; //年 int month; //月 int day; //日 }; class Student //定义Student类-存放学生信息 { public: Student(); //无参构造函数 Student(string ,string ,char,Date,int); //有参构造函数 ~Student(); //析构函数 void display(); //输出函数 void input(); //输入函数 void min(Student*,int); //求最低成绩函数 void sort(Student*,int); //按照成绩高低排序函数 //protected: //这里是保护成员//这里是VC6.0的原因string num; //学号 string name; //姓名 char sex; //性别

C++运算符重载

一、运算符重载的规则 运算符重载规则如下: ①、C++中的运算符除了少数几个之外,全部可以重载,而且只能重载C++中已有的运算符。 ②、重载之后运算符的优先级和结合性都不会改变。 ③、运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来说,重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。 不能重载的运算符只有五个,它们是:成员运算符“.”、指针运算符“*”、作用域运算符“::”、“sizeof”、条件运算符“?:”。 运算符重载形式有两种,重载为类的成员函数和重载为类的友元函数。 运算符重载为类的成员函数的一般语法形式为: 函数类型 operator 运算符(形参表) { 函数体; } 运算符重载为类的友元函数的一般语法形式为: friend 函数类型 operator 运算符(形参表) { 函数体; } 其中,函数类型就是运算结果类型;operator是定义运算符重载函数的关键字;运算符是重载的运算符名称。 当运算符重载为类的成员函数时,函数的参数个数比原来的操作个数要少一个;当重载为类的友元函数时,参数个数与原操作数个数相同。原因是重载为类的成员函数时,如果某个对象使用重载了的成员函数,自身的数据可以直接访问,就不需要再放在参数表中进行传递,少了的操作数就是该对象本身。而重载为友元函数时,友元函数对某个对象的数据进行操作,就必须通过该对象的名称来进行,因此使用到的参数都要进行传递,操作数的个数就不会有变化。 运算符重载的主要优点就是允许改变使用于系统内部的运算符的操作方式,以适应用户自定义类型的类似运算。 一般说来,单目运算符最好被重载为成员;对双目运算符最好被重载为友元函数,双目运算符重载为友元函数比重载为成员函数更方便此,但是,有的双目运算符还是重载为成员函数为好,例如,赋值运算符。 二、运算符重载为成员函数 对于双目运算符B,如果要重载B为类的成员函数,使之能够实现表达式oprd1 B oprd2,其中oprd1为类A的对象,则应当把B重载为A类的成员函数,该函数只有一个形参,形参的类型是oprd2所属的类型。经过重载后,表达式oprd1 B oprd2 就相当于函数调用 oprd1.operator B(oprd2).

实验十六运算符重载解读

实验十六运算符重载 一、实验目的 1、理解运算符重载作用和意义; 2、掌握类运算符和友元运算符重载的定义和使用; 3、掌握常用运算符(++、--、+、-、*、/、=、+=、-=、*=、/=、<<(插入)、>>(提取))的重载。 二、实验内容 1、下列程序定义了一个复数类,重载"+"运算符以实现复数的加法运算。 #include class Complex{ float Real,Image; //复数的实部和虚部 public: Complex(float r=0,float i=0) //初始化对象 { Real=r,Image=i; } float& AccessR() //存取实部 { return Real; } float& AccessI() //存取虚部 { return Image; } void Show() //显示复数 { cout<=0) cout<<"\t+"; else cout<<"\t"; cout<

学习知识资料讲解复数(基础学习知识)

高考总复习:复数 【考纲要求】 1.理解复数的基本概念,理解复数相等的充要条件; 2.了解复数的代数表示形式及其几何意义;能将代数形式的复数在复平面上用点或向量表示,并能将复平面上的点或向量所对的复数用代数形式表示。 3.会进行复数代数形式的四则运算,了解两个具体相加、相减的几何意义. 【知识网络】 【考点梳理】 考点一、复数的有关概念 1.虚数单位i : (1)它的平方等于1-,即2 1i =-; (2)i 与-1的关系: i 就是-1的一个平方根,即方程21x =-的一个根,方程21x =-的另一个根是i -; (3)实数可以与它进行四则运算,进行四则运算时,原有加、乘运算律仍然成立; (4)i 的周期性:41n i =,41n i i +=,421n i +=-,43n i i +=-(*n N ∈). 2. 概念

形如a bi +(,a b R ∈)的数叫复数,a 叫复数的实部,b 叫复数的虚部。 说明:这里,a b R ∈容易忽视但却是列方程求复数的重要依据。 3.复数集 全体复数所成的集合叫做复数集,用字母C 表示;复数集与其它数集之间的关系:N Z Q R C 4.复数与实数、虚数、纯虚、0的关系: 对于复数z a bi =+(,a b R ∈), 当且仅当0b =时,复数z a bi a =+=是实数; 当且仅当0b ≠时,复数z a bi =+叫做虚数; 当且仅当0a =且0b ≠时,复数z a bi bi =+=叫做纯虚数; 当且仅当0a b ==时,复数0z a bi =+=就是实数0. 所以复数的分类如下: z a bi =+(,a b R ∈)?(0)(0)00b b a b =?? ≠?=≠?实数;虚数当且时为纯虚数 5.复数相等的充要条件 两个复数相等的定义:如果两个复数的实部和虚部分别相等,那么我们就说这两个复数相等。即: 如果,,,a b c d R ∈,那么a bi c di a c b d +=+?==且. 特别地: 00a bi a b +=?==. 应当理解: (1)一个复数一旦实部、虚部确定,那么这个复数就唯一确定;反之一样. (2)复数相等的充要条件是将复数转化为实数解决问题的基础. 一般地,两个复数只能说相等或不相等,而不能比较大小。如果两个复数都是实数,就可以比较大小;也只有当两个复数全是实数时才能比较大小。 6.共轭复数: 两个复数的实部相等,而且虚部相反,那么这两个复数叫做共轭复数。即: 复数z a bi =+和z a bi a bi =+=-(,a b R ∈)互为共轭复数。 考点二:复数的代数表示法及其四则运算 1.复数的代数形式: 复数通常用字母z 表示,即a bi +(,a b R ∈),把复数表示成a bi +的形式,叫做复数的代数形式。 2.四则运算

相关主题
相关文档 最新文档