为什么c语言不能函数重载 c语言不支持函数重载

C语言里的函数是否可以进行重载吗?标准C, 不支持函数重载 。
函数重载是C为什么c语言不能函数重载的概念 。不光是类为什么c语言不能函数重载的成员函数, 一般函数以及模板函数都是可以重载为什么c语言不能函数重载的 。
为什么c支持重载而C语言不支持重载因为c有名命修饰为什么c语言不能函数重载 , 他会把每一个参数为什么c语言不能函数重载的类型啥为什么c语言不能函数重载的用一个字符串来表示加到函数名上 。所以重载为什么c语言不能函数重载的两个同名函数编译出来的函数名不同,所以不冲突
c没有命名修饰 , 函数叫啥编译出来就叫啥,同名函数当然会冲突的
c语言中,既然不支持函数重载,那么printf算怎么回事?在c语言中,它不就是被重载了吗?这个问题问的不错 。
其实printf不是重载,c语言不支持函数重载 这句话是对的 。
printf函数是通过变长参数表实现的 。你可以查看一下printf的函数原型声明 。
printf函数的实现在不同的机器上是不同的,但提供的接口是一致的 。
printf函数的正确声明形式如下:
int printf(const *fmt,...)
其中省略号表示参数表中参数的数量和类型是可变的 。它是变长参数表的固定形式 。
省略号只能出现在参数表的尾部 。
具体的话你还是上网查查吧,我对这个原型也没研究 。
我想既然你能问这个问题,看点资料不难理解,很快能明白怎么回事 。明白了以后,你就可以自己写出这样变长参数表的函数了 。好好加油!
C语言支持函数重载吗C语言是不支持函数重载的,但是C是可以的,这是C对C的一个重要扩展 。
c语言,c,哪些运算符不能重载?c语言没有重载的概念,重载是C的内容
c运算符:
算术运算符: ,-,*,/,%,,--;
位操作运算符:,|,~,^(位异或),<<(左移),>>(右移)
逻辑运算符:!,,||;
比较运算符:<,>,>=,<=,==,!=;
赋值运算符:=, =,-=,*=,/=,%=,=,|=,^=,<<=,>>=;
其他运算符:[],(),->,,(逗号运算符),new,delete,new[],delete[],->* 。
不能重载的总共五个:
(1)
"."(类成员访问运算符)
(2)"
.*"(类成员指针访问运算符)
(3)
"::"(域运算符)
(4)"siezof"(长度运算符)
(5)
"
?:"(条件运算符)
还有就是:typeid.
其中
.*是C的类成员函数指针调用运算符,是用来调用一个类函数指针的 。
举例:
假设有一个ClassA类拥有一个成员函数void
ClassA::func(int
i),则可以这么用:
1
2
3
4
void
(ClassA::*fp)(int
i)
//
定义一个类函数指针 。
ClassA
obj;
fp
=
ClassA::func;
//
给这个类函数指针赋值
(obj.*fp)(5);
//
这么用,相当于调用obj.func(5);
没有什么非禁止operator?:重载的理由,只不过没有必要而已 。另外,expr1?expr2:expr3的重载函数无法保证expr2和expr3中只有一个被执行 。
而“sizeof”无法被重载是因为不少内部操作 , 比如指针加法,都依赖于它,例如:
X
a[10];
X*
p
=
a[3];
X*
q
=
a[3];
p;
//
p
points
to
a[4]
//
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
Y
{
public:
void
f();
//
...
};
class
X
{
//
assume
that
you
can
overload
.
public:
Y*
p;
Y
operator.()
{
return
*p;
}
void
f();
//
...
};
void
g(X
x)
{
x.f();
//
X::f
or
Y::f
or
error?
}
请注意:
1.
重载不能改变该运算符用于内置类型时的函义,程序员不能改变运算符 用于两个int型时的含义 。
2.
运算符函数的参数至少有一个必须是类的对象或者类的对象的引用 。这种规定可以防止程序员运用运算符改变内置类型的函义 。
3.
重载不能改变运算符的优先级 。
4.
重载不能改变运算符的结合律 。
5.
重载不能改变运算符操作数的个数 。比如 需要两个操作数,则重载的 也必须要有两个操作数 。
【为什么c语言不能函数重载 c语言不支持函数重载】关于为什么c语言不能函数重载和c语言不支持函数重载的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读