您当前的位置:首页 > 互联网教程

C语言可不可以重载

发布时间:2025-05-13 19:43:09    发布人:远客网络

C语言可不可以重载

一、C语言可不可以重载

1.从C语言的语法设计来说是不支持的,早期的C编译器未考虑过函数重载这一功能,所以就会有那么多类似的函数abs,labs,fabs等等(每种类型都要考虑一个不同的函数名)。\x0d\x0a2.C语言标准就规定不允许同一作用域中两个函数重名。和C语言相关的域有两种,一个是给编译器看得,还有一种是给链接器看的,而给编译器看的这种域主要是关于\x0d\x0a变量的可见范围,而链接器看到的那个是叫文件域,而全局域可能要跨越好几个文件域,这样只要两个同名函数用static修饰,并且在不同的文件中,就不会\x0d\x0a冲突。不过这个实际上已经超越了编译器的范围,表面看起来两个函数同名,但是实际上编译器为链接器产生是指向的同一个函数地址。 \x0d\x0a3.函数重载是一个编译期行为,主要是通过name mangling来产生不同的汇编符号,让linker可以正确的link代码。\x0d\x0a4.但是,C语言作为一个具有超强功能的底层语言,是有办法进行模拟函数重载的。那就是函数指针。最简单的例子就是qsort函数。这个函数可以传递一个函数指针变量,通过不同的函数指针,可以对不同的数据类型就行相同的qsort操作,从某种层面来说相当于函数重载。

二、c语言,c++,哪些运算符不能重载

c语言没有重载的概念,重载是C++的内容

位操作运算符:&,|,~,^(位异或),<<(左移),>>(右移)

比较运算符:<,>,>=,<=,==,!=;

赋值运算符:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=;

其他运算符:[],(),->,,(逗号运算符),new,delete,new[],delete[],->*。

(2)".*"(类成员指针访问运算符)

.*是C++的类成员函数指针调用运算符,是用来调用一个类函数指针的。

假设有一个ClassA类拥有一个成员函数void ClassA::func(int i),则可以这么用:

void(ClassA::*fp)(int i)//定义一个类函数指针。

fp=&ClassA::func;//给这个类函数指针赋值

(obj.*fp)(5);//这么用,相当于调用obj.func(5);

没有什么非禁止operator?:重载的理由,只不过没有必要而已。另外,expr1?expr2:expr3的重载函数无法保证expr2和expr3中只有一个被执行。

而“sizeof”无法被重载是因为不少内部操作,比如指针加法,都依赖于它,例如:

// thus the integer value of p must be

// sizeof(X) larger than the integer value of q

这样,sizeof(X)无法在不违背基本语言规则的前提下表达什么新的语义。

在N::m中,N和m都不是表达式,它们只是编译器“认识”的名字,“::”执行的实际操作是编译时的名字域解析,并没有表达式的运算牵涉在内。或许有人会觉得重载一个“x::y”(其中x是实际对象,而非名字域或类名)是一个好主意,但这样做引入了新的语法[译注:重载的本意是让操作符可以有新的语义,而不是更改语法——否则会引起混乱],我可不认为新语法带来的复杂性会给我们什么好处。

原则上来说,“.”运算符是可以被重载的,就像“->”一样。不过,这会带来语义的混淆——我们到底是想和“.”后面的对象打交道呢,还是“.”后面的东东所实际指向的实体打交道呢?看看这个例子(它假设“.”重载是可以的):

class X{// assume that you can overload. public:

x.f();// X::f or Y::f or error?

1.重载不能改变该运算符用于内置类型时的函义,程序员不能改变运算符+用于两个int型时的含义。

2.运算符函数的参数至少有一个必须是类的对象或者类的对象的引用。这种规定可以防止程序员运用运算符改变内置类型的函义。

3.重载不能改变运算符的优先级。

4.重载不能改变运算符的结合律。

5.重载不能改变运算符操作数的个数。比如+需要两个操作数,则重载的+也必须要有两个操作数。

三、c语言pow包含多重函数什么意思

在C语言中,pow函数是一个用于计算幂的函数。它包含多重函数是指该函数有多个重载形式,可以接受不同类型的参数。具体而言,C语言中的pow函数有三种形式:

1. double pow(double x, double y):接受两个double类型的参数,计算x的y次方,并返回结果。

2. float powf(float x, float y):接受两个float类型的参数,计算x的y次方,并返回结果。

3. long double powl(long double x, long double y):接受两个long double类型的参数,计算x的y次方,并返回结果。通过这些重载形式,pow函数可以满足不同数据类型的计算需求。当我们使用pow函数时,根据实际需要选择合适的形式即可。