c++6操作符重载

合集下载

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

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

运算符重载基础概念练习题1、下列运算符中,()运算符在C++中不能重载。

A=B()C::Ddelete2、下列运算符中,()运算符在C++中不能重载。

A:B[]CnewD&&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++编译器解释为()。

Aoperator>(obj1,obj2)B>(obj1,obj2)Cobj2.operator>(obj1)Dobj1.oprator>(obj2)8、在表达式某+y某z中,+是作为成员函数重载的运算符,某是作为非成员函数重载的运算符。

下列叙述中正确的是()。

Aoperator+有两个参数,operator某有两个参数Boperator+有两个参数,operator某有一个参数Coperator+有一个参数,operator某有两个参数Doperator+有一个参数,operator某有一个参数9、重载赋值操作符时,应声明为()函数。

A友元B虚C成员D多态10、在一个类中可以对一个操作符进行()重载。

A1种B2种以下C3种以下D多种11、在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是()。

A.作为友元函数重载的1元运算符B.作为成员函数重载的1元运算符C.作为友元函数重载的2元运算符D.作为成员函数重载的2元运算符12、在成员函数中进行双目运算符重载时,其参数表中应带有()个参数。

C #语言

C #语言
结构体:
一个C#的结构体与C++的结构体是相似的,因为它能够包含数据声明和方法.但是,不象C++,C#结构体与类是不同的而且不支持继承.但是,与Java相同的是,一个结构体可以实现接口(interface)。
预编译:
C#中存在预编译指令支持条件编译,警告,错误报告和编译行控制.可用的预编译指令有:
命名空间中的申明:
当你创建一个程序的时候,你在一个命名空间里创建了一个或多个类.同在这个命名空间里(在类的外面)你还有可能声明界面,枚举类型和结构体。必须使用using关键字来引用其他命名空间的内容。
基本的数据类型
C#拥有比C/C++或者Java更广泛的数据类型.这些类型是bool,byte,ubyte,short,ushort,int,uint,long,ulong,float,double,和decimal.像Java一样,所有这些类型都有一个固定的大小.又像C和C++一样,每个数据类型都有有符号和无符号两种类型.与Java相同的是,一个字符变量包含的是一个16位的Unicode字符.C#新的数据类型是decimal数据类型,对于货币数据,它能存放28位10进制数字.
目录
简介
定义
从Java继承而来的特点
C#从C和C++继承的特点
操作符重载:
C#独有的特点展开
编辑本段
简介
C sharp(音标 [∫a:p] )(又被简称为"C#")是微软公司在2000年6月发布的一种新的编程语言,并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、界面、与Java几乎同样的语法,和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司.NET windows网络框架的主角。

运算符重载知识题

运算符重载知识题

.《面向对象程序设计》习题班级:学号:姓名:名单序号:成绩:第7章运算符重载和多态性一、选择题(共30分,每题1分)1.下列运算符中,()运算符在C++中不能重载。

A.?:B.[]C. newD.++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. 下列运算符中哪些是不能够被重载的()。

练习

练习
D BC A
下面程序的输出结果为: #include<iostream> using namespace std; int main() { int x=10,&y=x; cout<<"x="<<x<<",y="<<y<<endl; int *p=&y; *p=100; cout<<"x="<<x<<",y="<<y<<endl; return 0; } 输出结果: x=10,y=10 x=100,y=100 x=10,y=10;x=100,y=100。
下面程序的输出结果为 #include<iostream> using namespace std; int main() { int num=50; int& ref=num; ref=ref+10; cout<<"num="<<num<<endl; num=num+40; cout<<"ref="<<ref<<endl; return 0; } num=60 ref=100
♦ 下面对引用的描述中( C )是错误的。 A. 引用是某个变量或对象的别名 B. 建立引用时,要对它初始化 C. 对引用初始化可以使用任意类型的变量 D. 引用与其代表的对象具有相同的地址 ♦ 对重载的函数来说,下面叙述不正确的是(D )。 A. 参数的类型不同 B. 参数的顺序不同 C. 参数的个数不同 D. 参数的个数、类型、顺序都相同,但函数的返回值类型不同

C语言运算符大全

C语言运算符大全

C语言运算符大全C语言的内部运算符很丰富,运算符是告诉编译程序执行特定算术或逻辑操作的符号。

C语言有三大运算符:算术、关系与逻辑、位操作。

另外,C还有一些特殊的运算符,用于完成一些特殊的任务。

表2-5列出了C语言中允许的算术运算符。

在C语言中,运算符“+”、“-”、“*”和“/”的用法与大多数计算机语言的相同,几乎可用于所有C语言内定义的数据类型。

当“/”被用于整数或字符时,结果取整。

例如,在整数除法中,10/3=3。

一元减法的实际效果等于用-1乘单个操作数,即任何数值前放置减号将改变其符号。

模运算符“%”在C语言中也同它在其它语言中的用法相同。

切记,模运算取整数除法的余数,所以“%”不能用于float和double类型。

最后一行打印一个0和一个1,因为1/2整除时为0,余数为1,故1%2取余数1。

C语言中有两个很有用的运算符,通常在其它计算机语言中是找不到它们的—自增和自减运算符,++和--。

运算符“++”是操作数加1,而“--”是操作数减1,换句话说:x=x+1;同++x;x=x-1;同--x;自增和自减运算符可用在操作数之前,也可放在其后,例如:x=x+1;可写成++x;或x++;但在表达式中这两种用法是有区别的。

自增或自减运算符在操作数之前,C语言在引用操作数之前就先执行加1或减1操作;运算符在操作数之后,C语言就先引用操作数的值,而后再进行加1或减1操作。

请看下例:x=10;;y=++x;此时,y=11。

如果程序改为:x=10;y=x++;则y=10。

在这两种情况下,x都被置为11,但区别在于设置的时刻,这种对自增和自减发生时刻的控制是非常有用的。

在大多数C编译程序中,为自增和自减操作生成的程序代码比等价的赋值语句生成的代码要快得多,所以尽可能采用加1或减1运算符是一种好的选择。

下面是算术运算符的优先级::最高++、----(一元减)*、/、%最低+、-编译程序对同级运算符按从左到右的顺序进行计算。

carray的用法 -回复

carray的用法 -回复

carray的用法-回复CArray 是一个在C++标准模板库(STL)中定义的容器类。

它提供了一个动态数组的实现,可以用于存储和操作多个对象。

在这篇文章中,我们将深入探讨CArray 的用法和功能。

首先,让我们了解CArray 的基本信息。

CArray 是由最基本的数据类型或自定义类型组成的元素的集合。

与静态数组相比,CArray 具有动态调整大小的能力,这使得它成为处理灵活数量的对象的理想选择。

此外,CArray 还提供了一系列的成员函数来操作和管理元素。

要使用CArray,我们需要包含<array> 头文件,并使用`std` 命名空间。

接下来,我们可以声明和初始化一个CArray 对象,如下所示:cpp#include <iostream>#include <array>int main(){std::CArray<int, 5> myArray = {1, 2, 3, 4, 5};}在这个例子中,我们声明了一个CArray 对象`myArray`,它包含了5个整型元素,并初始化为1,2,3,4 和5。

现在,我们将详细介绍CArray 的一些常见用法。

1. 访问元素:使用索引操作符`[]` 可以访问CArrary 对象中的元素。

例如,要访问`myArray` 中的第一个元素,可以使用`myArray[0]`。

2. 插入元素:CArray 提供了几种方法来插入新元素。

`push_back()` 函数可以在CArray 的末尾添加一个新元素。

以下示例将向`myArray` 添加一个元素:cppmyArray.push_back(6);3. 删除元素:类似于插入操作,CArray 也提供了几种方法来删除元素。

`pop_back()` 函数删除CArray 的末尾元素。

以下示例将删除`myArray` 中的最后一个元素:cppmyArray.pop_back();4. 修改元素:可以使用索引操作符`[]` 直接修改CArray 对象中的元素。

国家二级C%2b%2b机试(运算符重载)模拟试卷3.doc

国家二级C%2b%2b机试(运算符重载)模拟试卷3.doc

控制面板试卷遒分:分试题数量:答题120分-钟一剩余时间:调整字号:12 14 16 1820调整背景:国家二级C++机试(运算符重载)模拟试卷3全部题型1.选择题选择题1.运算符重载是对已有的运算符赋予多重含义,因此()。

A.可以对基本类型(如int类型)的数据,重新定义“+”运算符的含义□ B.可以改变一个己有运算符的优先级和操作数个数C.只能重载C++中已经有的运算符,不能定义新运算符D. C++中己经有的所有运算符都可以重载正确答案:c解析:此题考查的是运算符重载。

运算符重载是针对C++语言原有的运算符进行的,并不能创造新的运算符。

2.通过运算符重载,可以改变运算符原有的()。

A.操作数类型B.操作数个数C.优先级D.结合性正确答案:A解析:此题考查的是运算符重载。

运算符重载具有保持其原有的操作数个数、优先级、语法结构和结合性不变的特性。

故本题选项A正确。

答题卡1A B C D2 A B C D3 A B C D4 A B C D5 A B C D6A B C D7 A B C p8 A B C D9 A B C D WA B C D11 A B CD12A BCD13A BCD14A B C D -----15 A B C D 16A B C D 17A BCD18A B C D 19A BCD20A BCD21A BCD 22 A B C D3.下列关于运算符重载的描述中,正确的是()。

A.运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符B.•元运算符只能作为成员函数重载C.二元运算符重载为非成员函数时,参数表中有一个参数D.C++中可以重载所有的运算符正确答案:A解析:此题考查的是运算符的重载。

运算符重载为成员函数时,形参个数一般为运算符元数减1;重载为非成员函数时,形参个数一般和运算符元数相等。

所以二元运算符重载为非成员函数时,参数表中应有两个参数,C选项错误:运算符重载为成员函数,若参数表中无参数,重载的是一元运算符,选项A 正确:一元运算符中,“・”(取负)、"++”、"・・”等均可重载为成员函数:C++ 语言中,”、*”、"・>*"、":: ”、“?:”五个运算符不能重载。

cpp是什么意思

cpp是什么意思

cpp是什么意思Cpp是什么意思Cpp是C++的简称,是一种计算机编程语言,它扩展了传统的C 语言,提供了更多的特性和功能。

C++在20世纪80年代由丹尼斯·里奇(Dennis Ritchie)和布莱恩·克尼汉(Brian Kernighan)开发,旨在为开发人员提供更好的控制和更高的性能。

C++是一种编译型语言,它允许开发人员以高级语言的方式编写代码,并将其编译为可执行程序。

C++可以在各种不同的计算机平台和操作系统上运行,包括Windows、Mac OS、Linux和各种嵌入式系统。

C++在软件开发中广泛应用,尤其是在高性能计算、游戏开发、嵌入式系统和操作系统开发领域。

许多著名的软件和系统,如Adobe Photoshop、Microsoft Office和Windows操作系统,都使用C++开发。

C++有许多独特的特性,使其成为一种强大且灵活的编程语言。

以下是一些C++的主要特性:1. 面向对象编程(OOP):C++支持面向对象编程范例,允许开发人员使用类、对象、继承、多态等概念来组织和管理代码。

面向对象编程可以提高代码的可维护性、可重用性和扩展性。

2. 泛型编程:C++引入了模板(Template)机制,使开发人员能够编写通用的代码,以适应不同的数据类型和算法。

泛型编程可以提高代码的灵活性和重用性。

3. 内存管理:C++允许开发人员手动管理内存,包括动态分配和释放内存。

这为开发高性能和资源敏感的应用程序提供了灵活性,但也增加了代码编写和维护的复杂性。

4. 强大的标准库:C++标准库提供了丰富的功能和数据结构,包括容器、算法、输入输出操作和并发编程等。

使用标准库可以加速开发过程,减少重复劳动。

5. 高性能:C++编译器能够生成高效的机器代码,提供了近乎原生的性能。

C++还支持内联汇编和优化技术,可以进一步提高代码的性能。

6. 兼容性:C++与C语言高度兼容,可以使用C语言的代码和库,无需修改即可在C++中使用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

赋值操作符(=)不能被派生类所继承。 下标操作符[]、赋值操作符=、函数调用操作符()和指针操 作符->必须以类的成员函数的形式进行重载
class C { public: C operator + ( const C& ) const; //... }; C C::operator + (const C& c) const { //... } C a, b, c; a = b.operator + ( c ); a = b + c;
// Complex + as binary operator Complex Complex::operator+( const Complex& u ) const { Complex v( real + u.real, imag + u.imag ); return v; } // Complex - as binary operator Complex Complex::operator-( const Complex& u ) const { Complex v( real - u.real, imag - u.imag ); return v; }
Complex operator / (const Complex& t, const Complex& u) { double abs_sq = u.get_real() * u.get_real() + u.get_imag() * u.get_imag();
return Complex( (t.get_real() * u.get_real() + t.get_imag() * u.get_imag()) / abs_sq, (t.get_imag() * u.get_real() - t.get_real() * u.get_imag()) / abs_sq );
// constructor -- real and imag given Complex::Complex( double re, double im ) { real = re; imag = im; }
void Complex::write() const { cout << real << " + " << imag << 'i'; }
// default constructor Complex::Complex() { real = imag = 0.0; } // constructor -- real given butபைடு நூலகம்not imag Complex::Complex( double re ) { real = re; imag = 0.0; }
顶层函数进行操作符重载与成员函数重载的不同 1.操作符重载(成员函数方式)
class Vector3D { public: Vector3D( ) { x = y = z = 0.0; } Vector3D(double a, double b, double c) { x = a; y = b; z = c; } Vector3D operator * (int n) { return Vector3D(n*x, n*y, n*z); } private: double x, y, z; }; Vector3D v1, v2(1.0, 2.0, 3.0); v1 = v2*9; v1 = 9*v2;
Vector3D operator * (int n, const Vector3D& v) { return Vector3D(n*v.getX(), n*v.getY(), n*v.getZ()); } Vector3D operator * (const Vector3D& v, int n) { return Vector3D(n*v.getX(),n*v.getY(), n*v.getZ()); }
解决方案: 1. 将real和imag设计成Complex类的公有成员 2. 在Complex类中加入用于访问real和imag的公有 成员函数 3. 将operator+声明为Complex类的friend。
class Complex { public: Complex(); Complex( double ); Complex( double, double ); void write() const;
Complex类的实现
class Complex { public: Complex(); // default Complex( double ); // real given Complex( double, double ); // both given
void write() const; // operator methods Complex operator+( const Complex& ) const; Complex operator-( const Complex& ) const; Complex operator*( const Complex& ) const; Complex operator/( const Complex& ) const; private: double real; double imag; };
// Complex * as binary operator Complex Complex::operator*( const Complex& u )const { Complex v( real * u.real - imag * u.imag, imag * u.real + real * u.imag ); return v; } // Complex / as binary operator Complex Complex::operator/( const Complex& u ) const { double abs_sq = u.real * u.real + u.imag * u.imag; Complex v( ( real * u.real + imag * u.imag ) / abs_sq, ( imag * u.real - real * u.imag ) / abs_sq ); return v; }
Complex operator - (const Complex& t, const Complex& u) { return Complex( t.get_real() - u.get_real(), t.get_imag() - u.get_imag() ); } Complex operator * (const Complex& t, const Complex& u) { return Complex( t.get_real() * u.get_real() - t.get_imag() * u.get_imag(), t.get_imag() * u.get_real() + t.get_real() * u.get_imag() ); }
int main() { Complex c1( 7.7, 5.5 ); Complex c2( 4.2, -8.3 ); Complex c3;
c3 = c1 + c2; cout<< "c1 + c2 = "; c3.write(); cout<< '\n' ; c3 = c1 - c2; cout<< "c1 - c2 = ";
c3.write(); cout<< '\n' ; c3 = c1 * c2; cout<< "c1 * c2 = "; c3.write(); cout<< '\n' ; c3 = c1 / c2; cout<< "c1 / c2 = "; c3.write(); cout<< '\n' ; return 0;
操作符重载
重载就是相同的名称或符号具有不同的意义。 重载 : 函数重载和操作符重载。 操作符重载有两种形式:类的成员函数方式和顶层函数方式 6.1 基本操作符重载 操作符有一元操作符和二元操作符。 下列操作符不能被重载: 成员选择符(.)、成员对象选择符(.*)、域解析操作符 (::)和条件操作符(?:)。
例子:一元操作符! 和 二元操作符 = class C { public: C& operator= (const C&); C operator ! (); //... };
6.1.1 操作符的优先级和语法 重载不能改变操作符的优先级和语法。 如果一个内建操作符是一元的,那么所有 对它的重载仍是一元的。如果一个内建操 作符是二元的,那么所有对它的重载仍是 二元的。
class C { public: C operator % ( ); };
6.2 示例程序:复数类
要求:
1。重载+、-、* 和 /,以支持复数的算术运算 2。设计一个write函数,以输出一个复数至标准输出 3。设计默认构造函数,将实部和虚 部设为零 4。设计拥有一个参数的构造函数,将实部设为该参 数,虚部设为零 5。设计拥有两个参数的构造函数,将两个参数分别 赋给实部和虚部。
//*** ERROR: neither a method nor a // a function that takes a class argument float operator + (float f1, float f2) { return (f1*f1 + f2*f2); }
相关文档
最新文档