在c 中 方法重载

在c 中方法重载

在C语言中,方法重载是指在同一个作用域内,允许存在多个同名函数,但是它们的参数类型或参数个数必须不同。方法重载能够提高代码的可读性和复用性,并且方便程序员在不同情况下使用相同的函数名来执行不同的操作。但是需要注意的是,C语言本身并不支持方法重载,因为它是一种静态语言,函数的调用是根据函数名和参数类型进行匹配的。

然而,通过一些技巧可以模拟方法重载的实现。一种常见的方法是通过函数名后缀来区分不同的函数,例如在同一作用域内定义了多个同名函数,参数个数和类型分别为add_int_int,add_float_float,add_int_float等,然后通过调用不同的函数名来实现重载。

例如,我们希望定义一个可以用于计算两个整数相加的函数和一个可以用于计算两个浮点数相加的函数,可以这样实现:

c

int add_int_int(int a, int b) {

return a + b;

}

float add_float_float(float a, float b) {

return a + b;

在这个例子中,我们定义了两个同名函数add,分别用于整数相加和浮点数相加。由于参数类型不同,它们可以被区分为两个不同的函数。

当需要执行整数相加时,可以调用add_int_int函数:

c

int result = add_int_int(1, 2);

当需要执行浮点数相加时,可以调用add_float_float函数:

c

float result = add_float_float(1.0, 2.0);

这样就可以根据参数类型的不同来调用不同的函数,实现了类似方法重载的效果。

另一种方法是使用宏定义来实现方法重载。宏定义可以根据传入的参数个数来展开不同的代码,从而实现不同的功能。

c

#define add(a, b) _Generic((a) + (b), \

int: add_int_int, \

float: add_float_float \

)(a, b)

在这个例子中,我们使用了_Generic关键字来根据表达式(a) + (b)的类型来选择不同的函数。当传入的参数是int类型时,选择add_int_int函数,当传入的参数是float类型时,选择add_float_float函数。然后通过宏定义调用不同的函数,从而实现方法重载的效果。

然后我们可以这样调用add函数:

c

int result1 = add(1, 2); 调用add_int_int函数

float result2 = add(1.0, 2.0); 调用add_float_float函数

在这个例子中,我们通过宏定义将函数调用转换为对应的函数调用,从而实现了方法重载的效果。

然而,需要注意的是,由于C语言本身不支持方法重载,使用方法重载的代码可能会增加程序的复杂性和理解难度。因此,在C语言中并不推荐过度使用方法重载。对于简单的函数重载,可以使用函数名后缀或宏定义等方法来模拟重载的效果。对于更复杂的情况,可以考虑使用其他编程语言,例如C++等,它们天生支持方法重载。

以上是关于在C语言中方法重载的介绍,通过合理的命名或宏定义可以模拟方法重载的效果。希望对你有帮助!

C习题

C#试题 1.关于C# 中的结构,一下说法中错误的是()。(选择一项) A :结构可以有构造函数 B :结构体内可以有字段 C :结构体内可以有方法 D :结构体内可以被继承 2. 在C# 编程中,访问修饰符控制程序对类中成员的访问,如果不写访问修饰符,类的默认访问类型是(b)。(选择一项) A public B private C internal D protected 3.在C#中,下面关于结构使用正确的是()。(选择一项) A :class Person{} Struct Teacher : Person{ C :struct Teacher{ string name; int age; public Teacher(string name,int age){ =name; =age; } } D :struct Teacher{ string name; int age; public Teacher(){} } 4.在C#中类的实例需要使用的关键字是(C)(选择一项) A : this B: base C new D : as 5.在C#程序中,索引器允许按照自定义的访问方式访问类或结构的实体组成的数组,以下所引器定义正确的是(A)。(选择一项) A :public Teach this[string index]{ get { } B :public Teach this[index]{ get{ } C :publci string Teach[index]{ get{ } D :public Teach[index]{ get{在C# 代码中,(A)是类Teacher 的属性。(选择一项)

在c 中 方法重载

在c 中方法重载 在C语言中,方法重载是指在同一个作用域内,允许存在多个同名函数,但是它们的参数类型或参数个数必须不同。方法重载能够提高代码的可读性和复用性,并且方便程序员在不同情况下使用相同的函数名来执行不同的操作。但是需要注意的是,C语言本身并不支持方法重载,因为它是一种静态语言,函数的调用是根据函数名和参数类型进行匹配的。 然而,通过一些技巧可以模拟方法重载的实现。一种常见的方法是通过函数名后缀来区分不同的函数,例如在同一作用域内定义了多个同名函数,参数个数和类型分别为add_int_int,add_float_float,add_int_float等,然后通过调用不同的函数名来实现重载。 例如,我们希望定义一个可以用于计算两个整数相加的函数和一个可以用于计算两个浮点数相加的函数,可以这样实现: c int add_int_int(int a, int b) { return a + b; } float add_float_float(float a, float b) { return a + b;

在这个例子中,我们定义了两个同名函数add,分别用于整数相加和浮点数相加。由于参数类型不同,它们可以被区分为两个不同的函数。 当需要执行整数相加时,可以调用add_int_int函数: c int result = add_int_int(1, 2); 当需要执行浮点数相加时,可以调用add_float_float函数: c float result = add_float_float(1.0, 2.0); 这样就可以根据参数类型的不同来调用不同的函数,实现了类似方法重载的效果。 另一种方法是使用宏定义来实现方法重载。宏定义可以根据传入的参数个数来展开不同的代码,从而实现不同的功能。

C#OOP测试题c#oop题目(答案)

C#OOP测试题 共50题,每题2分,总分100分 1.C#中的属性体现了面向对象编程的( ) 特性 A.封装 B.继承 C.多态 D.抽象 2.在c#中,可以通过( )实现方法重载 A.方法名相同,不同的参数个数 B.方法名相同,不同的参数名称 C.不同的方法名称,相同的参数个数 D.相同的方法名称和参数个数,不同的返回值 3.在C#中,ArrayList对象位于( )命名空间 A.System.Array B.System.IO C.System.Collection D.System.Runtime 4.在C#中,下述代码运行的结果是() Hashtable ht =new Hashtable() ht.Add(3,”三星”); ht.Add(2,”小米”); ht.Add(1,”苹果”); Console.WriteLine(ht[3]); A, 三星B, 小米C,苹果D,程序运行错误 5.在C#中程序中,关于ArrayList和Hashtable说法错误的有( ) (选择两项) A.从ArrayList和Hashtable获取集合中某个元素时,都需要进行类型转换 B.ArrayList和Hashtable都可以通过学习Sort方法进行排序 C.ArrayList和Hashtable都可以通过学习索引来访问集合元素 D.通过索引或对象可以删除ArrayList集合中的元素,通过键可以删除Hashtable集合中 的元素 6.下列泛型集合的创建正确是( ) A.List list =new List; B.List list =new List(); C.List list =new List; D.List list =new List(); 7.定义泛型集合对象users ,代码如下: Dictionary users =new Dictionary(); 下列集合操作的代码片段正确的是( ) https://www.360docs.net/doc/7919328230.html,er u =users[“Jimmy”]; https://www.360docs.net/doc/7919328230.html,ers.Add(“Jimmy”); https://www.360docs.net/doc/7919328230.html,ers.Remove(4); D.Foreach(User item in users.Keys){}

c 运算符重载

c 运算符重载 在C++中,可以通过运算符重载来改变运算符的行为。C++ 支持运算符重载,但是 C 不支持运算符重载。C++ 中的运算符重载可以被定义为全局或成员函数。C++ 中有一些默认的运算符重载,比如赋值运算符(=)、复合赋值运算符(+=、-= 等等)、函数调用运算符(())等等。但是 C++ 中并没有默认的 C 运算符重载。 C 语言中有很多运算符,比如加、减、乘、除、求余、逻辑运算符等等。这些运算符在 C++ 中也存在,但是没有默认的 C 运算符重载。如果想在 C++ 中使用 C 运算符,需要自己实现运算符重载。比如,可以通过定义一个全局函数来重载加法运算符(+),如下所示: ```c #include int operator+(int a, int b) { return a - b; //实现 a + b 的行为 } int main() { int a = 5, b = 2; int c = a + b; //调用重载的加法运算符 printf('%d + %d = %d ', a, b, c);

return 0; } ``` 上面的代码中,我们定义了一个全局函数 operator+,这个函数接收两个 int 类型的参数,并返回一个 int 类型的值。这个函数实现了加法运算符的行为,但是我们将加法运算符重载成了减法运算符的行为。当我们调用 a + b 时,实际上是调用了 operator+(a, b) 函数,返回的是 a - b 的结果。 同样地,我们可以通过定义全局函数来重载其他的 C 运算符,比如减法运算符(-)、乘法运算符(*)、除法运算符(/)、求余运算符(%)等等。但是需要注意的是,如果我们重载了 C 运算符,那么这个运算符在 C++ 中的行为就与 C 不同了,可能会导致程序出错,因此需要谨慎使用。 总之,C++ 支持运算符重载,但是没有默认的 C 运算符重载。如果需要使用 C 运算符,需要自己实现运算符重载。但是需要注意的是,重载的运算符在 C++ 中的行为可能会与 C 不同,可能会导致程序出错,因此需要谨慎使用。

对n个数据进行从小到大排序,用重载函数实现

#include using namespace std; void s(int a,int b,int c,int t=0) { int i; for(i=0;i<2;i++) { if(a>b) { t=a; a=b; b=t; } if(b>c) { t=b; b=c; c=t; } }

cout<<"the sorted numbers: "<b) { t=a; a=b; b=t; } if(b>c) { t=b; b=c; c=t;

} } cout<<"the sorted numbers: "<b) { t=a; a=b; b=t; } if(b>c) { t=b; b=c;

c=t; } } cout<<"the sorted numbers: "<>a>>b>>c; cout<<"input 3 float:"<>d>>e>>f; cout<<"input 3 double:"<>g>>h>>i; s(a,b,c); s(d,e,f);

c中getline的用法

c中getline的用法 下面小编就跟你们详细介绍下c中getline的用法的用法,希望对你们有用。 c中getline的用法的用法如下: getline函数是一个比较常见的函数。根据它的名字我们就可以知道这个函数是来完成读入一行数据的。现在对getline函数进行一个总结。 在标准C语言中,getline函数是不存在的。 下面是一个简单的实现方式: 复制代码 int getline_(char s[],int lim){ int c,i; i=0; while((c=getchar())!=EOF&&c!='\n'&&i0) printf("%s\n",s); return 0; } 复制代码

但是这个实现是有问题的,就是遇到空行的时候也会停止的。 为了解决这个问题,我们需要重新考虑while循环的判断条件。 在上面的实现中,我们是遇到EOF和换行'\n'的时候都停止,然后通过判断所读到的字符串的长度是否大于0来判断是否结束。 为了能读入空行,我们需要判断一下是否读入的是结尾EOF,如果不是就继续读取就可以了。 还有一点,EOF是什么? EOF是C语言中为了区分有效数据和输入结束符的。 C语言采用的解决办法是:在没有输入时getchar函数将返回一个特殊值,这个特殊值与任何实际字符都不同。这个值成为EOF (end of file ,文件结束)。我们在声明变量c 的时候,必须让它大到足以存放getchar函数返回的任何值。之所以不把c声明成char类型,是因为它必须足够大,除了能存储任何可能的字符外还要能存储文件结束符EOF。 EOF的输入由系统锁定。windows下是ctrl+z,linux/unix下是ctrl+d。 下面是给出的修改后的getline函数 复制代码 int getline2_(char s[],int lim){ int c,i; i=0; while((c=getchar())!=EOF&&c!='\n'&&i

c语言函数重载

c语言函数重载 c语言函数重载指的是同一个函数可以根据传入参数的不同而有不同的行为。它通过编译器在编译时,根据参数的类型、个数及顺序来决定调用哪一个函数。它可以使得同一个函数名称下可以有多个函数实现相同的功能,但是它们的参数列表不同。 c语言函数重载是c语言中实现函数多态性的一种方式,它能够帮助我们实现函数调用的简化,减少代码量,增强代码可读性和可维护性,提高程序的可维护性。 一般来说,c语言函数重载的实现方法有两种,一种是使用预处理器技术,另一种是使用宏技术。前者使用预处理器技术将多个函数名称重新定义为一个函数名称,然后在函数体内部根据不同的参数类型来实现不同的操作。而后者则是通过定义宏,然后通过宏中的if/else语句,根据参数的不同来调用不同的函数体。 预处理器技术和宏技术都可以实现函数重载,但是它们的机制不同,因此它们的实现方式也不同。如果使用预处理器技术,只要将多个函数名称重新定义为一个函数名称,然后在函数体内部根据不同的参数类型来实现不同的操作就可以了。而如果使用宏技术,则需要先定义一个

宏,然后在宏中定义一个if/else语句,根据参数的不同来调用不同的函数体。 此外,c语言函数重载还可以帮助我们实现函数的重命名,例如将一个函数名称重新定义为另一个函数名称,这样就可以把原来的函数名称彻底抹去,从而避免函数调用出现调用错误的情况,从而更好地保证代码的可维护性。 总而言之,c语言函数重载是c语言中实现函数多态性的一种方式,能够帮助我们实现函数调用的简化,减少代码量,增强代码可读性和可维护性,提高程序的可维护性,并且还可以实现函数的重命名,从而更好地保证代码的可维护性。

C语言支持C++重载的方法

1. cpp是怎么支持重载的? 就像好多同学提到的`name mangling`机制或者叫做`name decoration`,实际上不过是c语言中用函数名称作为标签, c++中把函数更多的属性作为标签而已,经过编译器处理后会生成修时候的名称(符号名); c语言中因为只用到了函 数名作为标签,因此符号名就可以用函数名代替,后来考虑到会和库的符号名冲突,不同的编译器又对这个符号进行了加工,比如前面加个下划线_* 继续说回c++,举例,我写了一个函数 istream &read_hw(istream &is, vector &hw) 对于c语言来说,函数的符号不过是对函数名read_hw的处理, c++会把参数也算进来作为标签,那编译器处理之后可以通过如下方式查看符号是啥样的 g++ -c *.cpp //生成目标文件.o nm *.o //查看目标文件中的符号表 可以看到,上面的函数在.o文件中生成符号名为: `_Z7read_hwRSiRSt6vectorIdSaIdEE` 这啥玩意儿啊?没关系,只要根据函数名搜索下就能找到,至于其他乱七八糟的字母不过是根据编译器给定的规则生成对不同类型的标示(大可不必管,不同平台生成规则是不一样的,visual c++的规则是对外不公开的,不过提供了反查的接口),如果需要看这个符号名原始函数是什么,可以通过如下命令实现: c++filt _Z7read_hwRSiRSt6vectorIdSaIdEE read_hw(std::basic_istream >&, std::vector >&) 这道题应该回答的就比较完整了面试官另外个问题我感觉应该是随口问的。 2. 为什么c没有支持重载? 有同学说是因为,c如果支持重载了,那么会造成`ABI`不兼容,可实际上,c++的重载特性本身就是`ABI`不兼容的原因之一,即不同的编译器生成的符号修饰符标准规则都是差异的,造成链接错误那也是必然的;激进如c++(我们连c++11都没有用过现在都17了),不同的派系visual c++和gcc目前是互不兼容,不 过终究应该会向着统一标准的方向去发展, c语言在等着这一天?然后顺手把 函数重载特性实现 3. 除了c, python/java等能实现c++编译器么? java/python这类语言是不能完全实现C++编译器的,只能实现词法分析,语法分析,语义分析,等与机器无关的部分,但是和机器密切相关的目标代码即.o 文件是不能用python/java实现的,java/python本身已经被解释器和物理机隔离开来。所以C++编译器不能用他们完全实现 我的理解,机器无关部分自不必说,机器相关的部分无外乎不同平台寄存器、数据类型字长的区别,就算是gcc的编译器内部实现也要支持不同的硬件平台生成不同的汇编文件,没搞明白这里python等语言怎么就不行了。 4. 既然c++ c语言的编译器有不同符号生成规则,如何相互链接? -c++提供c语言接口的话,`extern` “C”,标示按照c语言的符号生成规则提供接口

c语言重定义函数

C语言重定义函数中的特定函数 1. 引言 在C语言中,函数是一组执行特定任务的语句的集合。C语言允许我们重定义函数,即在程序中定义多个同名的函数。这种特性为我们提供了灵活性和可扩展性,使我们能够根据不同的需求实现不同的函数功能。本文将详细解释C语言重定义函数中的特定函数,包括函数的定义、用途和工作方式等。 2. 函数的定义和重定义 函数是C语言中的一种代码模块化机制,用于执行特定的任务。函数可以接受输入参数,并返回一个值。C语言中的函数定义由函数名、参数列表、返回类型和函数 体组成。例如,下面是一个简单的函数定义: int add(int a, int b) { return a + b; } 上述代码定义了一个名为add的函数,该函数接受两个int类型的参数a和b,并 返回它们的和。 在C语言中,我们可以定义多个同名的函数,即函数的重定义。函数的重定义可以在同一个源文件中,也可以在不同的源文件中。当我们调用一个函数时,编译器会根据函数的参数列表和返回类型来选择合适的函数进行调用。 例如,我们可以定义另一个同名的add函数: double add(double a, double b) { return a + b; } 上述代码定义了一个同名的add函数,该函数接受两个double类型的参数a和b, 并返回它们的和。 在函数重定义中,函数名相同但参数列表或返回类型不同的函数被认为是不同的函数。编译器会根据调用时提供的参数类型和返回类型来选择合适的函数进行调用。 3. 函数的用途 函数的重定义为我们提供了灵活性和可扩展性,使我们能够根据不同的需求实现不同的函数功能。下面是函数重定义的一些常见用途:

C++重载题库

1. 关于函数模板,描述错误的是(C) A) 函数模板必须由程序员实例化为可执行的函数模板 B) 函数模板的实例化由编译器实现 C) 一个类定义中,只要有一个函数模板,则这个类是类模板 D) 类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化 2. 下列的模板说明中,正确的是( A ) A) template B) template C) template D) template 3. 假设有函数模板定义如下: Template Max(T a, T b, T &c) { c=a+b; } 下列选项正确的是( A ) A) float x,y; float z; Max(x,y,z); B) int x,y,z; Max(x,y,x+y+z); C) int x,y; float z; Max(x,y,z); D) float x; int y, z; Max(x,y,z); 4. 关于类模板,下列描述错误的是(D)99999999999999999999999999 A) 一个普通基类不能派生类模板 B) 类模板从普通类派生,也可以从类模板派生 C) 根据建立对象时的实际数据类型,编译器把类模板实例化为模板类 D) 函数的类模板参数须通过构造函数实例化 5. 建立类模板对象的实例化过程为( C ) A) 基类à派生类B) 构造函数à对象 C) 模板类à对象D) 模板类à模板函数 6. 在C++中,容器是一种(D) A) 标准类B) 标准对象C) 标准函数D) 标准类模板 99999 7.关于类模板描述不正确的是(B). A.它的存在不代表一个具体的、实际的类,而是代表一类的类 B.根据它可以定义多个对象 C.它可以使类中的某些数据取任意类型 D.根据它可以产生一系列类 1.下列关于运算符重载不正确的是( ) A.运算符重载不能改变运算符的操作数个数

方法的重载与重写

方法的重载与重写 方法的重载和重写是Java语言中比较重要的概念。 方法的重载(Overload): 在同一类中,具有相同名称的方法,参数列表不同(参数个数或参数类型或参数顺序不同)的方法,称为方法的重载。重载的方法可以有不同的返回类型。 举个例子: java public class Example { 方法重载 public int add(int a, int b) { return a + b; } public double add(double a, double b) { return a + b; } }

方法的重写(Override): 在Java中,子类可以根据需要,对从父类继承过来的方法进行改造,这种情况被称为方法的重写(Override)。 当子类重写了从父类中继承而来的方法时,子类声明新的同名方法,参数列表与父类中被重写的方法完全相同,返回类型也相同或是父类方法返回类型的子类型。 举个例子: java class Animal { public void move() { System.out.println("动物可以移动"); } } class Dog extends Animal { public void move() { System.out.println("狗可以跑和走"); }

重载与重写的区别: 方法的重载是在一个类里面,方法名字相同,而参数不同。方法的重载必须改变参数列表;方法的重写是在子类继承父类的方法,重新定义父类的方法,如果方法名、参数列表和返回类型全部相同,那么子类的方法就覆盖了父类的方法,这种情况被称为方法的重写。

c语言中default的用法

c语言中default的用法 C语言是一门实践性和动手力量要求很高的高校主干课程,但是C语言试验课的教学始终不受重视,教学效果也不太抱负。下面我就跟你们具体介绍下c语言中default的用法,期望对你们有用。 C语言中的switch和default的意思 1.用于多分支选择的switch语句,其一般形式为:switch(表达式){ case 常量表达式1: 语句1; case 常量表达式2: 语句2; case 常量表达式n: 语句n; default: 语句n+1;} 2.switch 是分支语句,就是比较强大的if集;default为不满足全部的switch 条件那么后面的〔句子〕被执行。一般将default写在switch中的最终 3.是否要使用deafult 不!但是为了进展错误检查或规律检查,还是应当在switch语句中参与default 分支。例如,下述switch语句完全合法:switch (char_code){ case tyt: case y: printf ( You answered YES ! \n ) break case N: case n: printf (You answered NO!\n); break}但是,假设一个未知字符被传递给这条switch语句,会消灭什么状况呢?这时,程序将没有任何输出。因此,最好还是参与一个default分支,以处理这种状况:......default: printf (Unknown response : %d\n, char_code); break......此外,default 分支能给规律检查带来很多便利。例如,假设用switch语句来处理数目固定的条件,而且认为这些条件之外的值都属于规律错误,那么可以参与一个default分支来辨识规律错误。 c语言中default的用法:类中的默认函数 a.类中默认的成员函数 1.默认构造函数 2.默认析构函数 3.拷贝构造函数 4.拷贝赋值函数 5.移动构造函数 6.移动拷贝函数 b.类中自定义的操作符函数 1.operator 2.operator 3.operator 4.operator* 5.operator- 6.operator-* 7.operator new 8.operator delete 同时C++规定,一旦程序员实现了这些函数的自定义版本,那么编译器不会再自动生产默认版本。留意只是不自动生成默认版本,当然还是可手动生成默认版本的。当我们自己定义了待参数的构造函数时,我们最好是声明不带参数的版本以完成无参的变量初始化,此时编译是不会再自动供应默认的无参版本了。我们可以通过使用关键字default来把握默认构造函数的生成,显式地指示编译器生成该函数的默认版本。比方:

C语言的简答题包含解答共60道题

C语言的简答题包含解答共60道题 1. 什么是C语言? ◆C语言是一种通用的编程语言,由Dennis Ritchie于1972年开发。它被广泛用于系统编程、应用程序开发和嵌入式系统等领域。 2. 什么是C语言的注释? ◆在C语言中,注释用于添加对代码的解释和说明。有两种类型的注释:单行注释(//)和多行注释(/* */)。 3. 什么是变量?如何声明变量? ◆变量是用于存储数据的标识符。在C语言中,变量的声明包括变量类型和名称,例如:`int myVariable;`。 4. 什么是数据类型?举例说明几种C语言的数据类型。 ◆数据类型定义了变量可以存储的数据类型。一些C语言的数据类型包括int、float、char、double等。 5. 什么是C语言的关键字? ◆关键字是C语言中具有特殊含义的保留字,不能用作变量名。例如,`if`、`while`、`for`等是关键字。 6. 什么是运算符?举例说明一些C语言的运算符。 ◆运算符用于执行各种数学和逻辑操作。例如,+、-、*、/是算术运算符,==、!=、>、<是比较运算符。 7. 什么是条件语句?举例说明一个C语言的条件语句。 ◆条件语句用于根据条件执行不同的代码块。例如,`if`语句用于在条件满足时执行特定的代码块。 8. 什么是循环语句?举例说明一个C语言的循环语句。 ◆循环语句用于多次执行相同的代码块。例如,`for`循环用于按照特定条件重复执行代码块。 9. 什么是函数?如何声明和定义一个函数? ◆函数是可重复使用的代码块,用于执行特定任务。函数的声明包括函数返回类型、名称和参数列表,例如:`int add(int a, int b);`。 10. 什么是指针?如何声明和使用指针? ◆指针是用于存储变量地址的变量。指针的声明包括指针类型和名称,例如:`int *ptr;`。要使用指针,可以使用`&`运算符获取变量的地址,使用`*`运算符访问指针指向的值。 11. 什么是C语言中的数组?

c运算符的重载习题答案

1.概念填空题 1.1运算符重载是对已有的运算符赋予多重含义,使同一个运算符在作用于不同类型对象时导致不同的行为。运算符重载的实质是函数重载,是类的多态性特征。 1.2可以定义一种特殊的类型转换函数,将类的对象转换成基本数据类型的数据。但是这种类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数。类类型转换函数既没有参数,也不显式给出返回类型。类类型函数中必须有return 表达式的语句返回函数值。一个类可以定义多个类类型转换函数。 1.3运算符重载时其函数名由operator运算符构成。成员函数重载双目运算符时,左操作数是对象,右操作数是函数参数。 2.简答题 运算符重载的规则。 2.2简述重载单目运算符++、--,前置和后置时的差别。 2.3 C++中重运算符是否都可以重载?是否都可以重载成类的成员函数?是否都可以重载成类的友元函数? 2.4 构造函数作为类型转换函数的条件是什么。 3.选择题 3.1在下列运算符中,不能重载的是(B) A.! B. sizeof C. new D. delete 3.2 不能用友员函数重载的是(A)。 A.= B.== C.<= D.++ 3.3下列函数中,不能重载运算符的函数是(B)。 A.成员函数 B.构造函数 C.普通函数 D.友员函数 3.4如果表达式++i*k时中的”++”和”*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为(B)。 A.operator*(i.operator++(),k) B.operator*(operator++(i),k) C.i.operator++().operator*(k) D.k.operator*(operator++(i)) 3.5已知在一个类体中包含如下函数原型:VOLUME operator-(VOLUME)const;下列关于这个函数的叙述中,错误的是(B )。 A.这是运算符-的重载运算符函数 B.这个函数所重载的运算符是一个一元运算符 C.这是一个成员函数 D.这个函数不改变数据成员的值 3.6在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是(C )。 A.operator+有两个参数,operator*有两个参数 B.operator+有两个参数,operator*有一个参数 C.operator+有一个参数,operator*有两个参数 D.operator+有一个参数,operator*有一个参数 4.写出下列程序运行结果 4.1#include #using namesoace std;

C语言习题

C语言习题 (一) 一、判断题 ()1、开发C语言程序通常要经过编辑、预处理、编译、连接、装入和执行6个阶段。()2、C语言程序由一个或多个函数组成,其中有且只有一个main函数。 ()3、C语言中,所有标识符必须由一个字母 ( a ~ z , A ~ Z ) 或下划线 ( _ )开头。 ()4、同一程序的各函数中定义的局部变量不可以同名。 ()5、C语言中,主函数main中定义的变量称为全局变量,在整个文件中有效。 ()6、C语言中,函数重载常用于设计多个进行类似任务而处理不同数据类型的同名函数。()7、C语言中,数组名的值就是数组中第一个元素的值。 ()8、在C++中,指针的作用是用来表示一个变量指向另一个变量这样的指向关系。()9、C语言中,定义结构时,结构体中的成员名不能与程序中的其它变量重名。 ()10、C语言中,声明一个结构并不分配内存,只有在定义结构变量时,才分配内存。 二、填空题 1、在C语言中,定义double类型数组arr, 数组大小为20, 应写为 ()。 2、写出公式S=a2+b2+2ab的C语言赋值语句:()。 3、定义a为长度为10的字符串、并为字符串赋初值"continue"的语句为()。 4、设ch是字符变量,则判断ch是小写英文字母的逻辑表达式为()。 5、函数的返回值也叫函数值,函数值是通过函数中的()语句获

得的。 6、链表是一种非常有用的动态数据结构,只有一个指针链的链表称为()。 7、对数组a[]进行初始化的数据为{2,4,6,8,10,12,14},则a[3]被初始化为()。 8、对于 int *p, i = 5, j = 6; 执行 p = &i; p = &j; 后(*p)的值为()。 9、执行完下列语句段后, i的值为:()。 int a[3][4]={{1,2,3},{4,5,6}}, i; i= a[1][2]; 10、有语句struct point{int x;int y;}; point pExample; 则将pExample的成员x初始化为8的语句是()。 三、单选题 1、int i=10; float x; 执行x=8.0/i; 后x的值为()。 ①0.8 ②0 ③0.0 ④ 1.0 2、下列变量名,()是合法的 ①1x ②Stu_No ③int ④A-1 3、若i是int型变量,则程序段:i=322; if(i%2==0)printf(“####”); else printf(“****”); 的输出结果是( ) ①#### ②**** ③####**** ④语法错误 4、函数中的形式参数是()。 ①全局变量②局部变量③静态变量④函数 5、已定义x和y为double类型,则表达式:x=2,y=x+3/2的值是( ) ① 1 ② 3.0 ③ 2.0 ④ 2.5 6、语句: for (int k = -90; k; k--) printf ("%d ", k); ( ) ①编译通不过②能运行, 但会死循环

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