当前位置:首页 » 编程语言 » c语言重载

c语言重载

发布时间: 2022-06-17 17:40:53

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语言 实现“+”的重载。(20分)

你需要 friend 和 operator

Ⅲ C语言可以重载吗

不可以!!!重载是c++才有的

Ⅳ c语言怎么写重载函数

c语言写重载函数:

  1. 首先明确重载函数的定义:在相同的声明域中的函数名相同的,而参数表不同的,即通过函数的参数表而唯一标识并且来区分函数的一种特殊的函数。

  2. 当将要定义一组函数,使它们执行一系列的操作,但是它们是应用在不同的参数类型上的。此时可以选择重载函数。

  3. 例如:

    通过参数就可以一眼分辨不同的函数。

Ⅳ 什么是C++重载

C++重载是C语言中的一种函数表现方式,即重载函数。

重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。

也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题,不能只有函数返回值类型不同。

(5)c语言重载扩展阅读:

C++运算符重载的相关规定如下:

1、不能改变运算符的优先级。

2、不能改变运算符的结合型。

3、默认参数不能和重载的运算符一起使用。

4、不能改变运算符的操作数的个数。

5、不能创建新的运算符,只有已有运算符可以被重载。

6、运算符作用于C++内部提供的数据类型时,原来含义保持不变。

参考资料来源:网络:重载函数

Ⅵ C语言中的重载问题

sum(1,2)可以是调用sum(int,int)也可以是调用sum(float,float)
因为传递进去的1和2,可以被编译器转换成sum(1.0,2.0),编译器不确定你要调用哪个
同理sum(1.2,2.4)也可能被编译器转换成sum(1,2),也不能确定你要调用哪个

sum(1.3,2.4)改成sum((float)1.3,(float)2.4)就可以了,如果写成sum((float)1.3,2.4)或者sum(1.3,(float)2.4)也可以通过编译,但是可能会有警告
用显示的类型转换来清楚地告诉编译器要调用哪个

Ⅶ c语言符号重载

很简单, 运算符 如+ - * / 等,两边的数据类型是可以变化的,
如1+1 对应的是 int型
1.0+1.0 对应的是float型
两个式子调用的程序是不一样的,但用的都是同一个运算符,这就是重载
你自己写的类也可以用到这些运算符, 只要重载你用到的运算符自己写算法就可以了

Ⅷ C语言支持函数重载吗

C语言是不支持函数重载的,但是C++是可以的,这是C++对C的一个重要扩展。

Ⅸ 在C语言中类成员,函数重载,继承,派生类,类模板怎么定义。

C语言中没有类的概念,C++中才有类,有类成员变量,成员函数,对象,以及重载,继承,派生的概念;
函数的重载是指在同一个类中具有相同的函数名,但是可能函数的返回值类型,或者形参个数,或者形参类型不同;
派生是指基类跟子类的关系:例如class
A:public
B;类A共有继承B;
呵呵,这些东西需要你慢慢看,注意重载
跟覆盖的区别以及与虚函数之间的关系,等等
至于类模板,就是你定义一个类,而不指定数据类型,关键字template,等到后面的开发中你可以实际根据需要实例化为你想要的
类型,例如int
,char,struct
等等

Ⅹ C语言函数重载问题

C语言没有重载函数!printf是C语言的
函数
如果你是C++项目
那你直接写函数就行了
如果你也是先变长
参数
函数的话
那就编译出错呗!

热点内容
安卓系统网络播放器哪个好 发布:2025-02-06 20:42:02 浏览:814
头条缓存的视频格式 发布:2025-02-06 20:32:18 浏览:115
ftp不显示文件夹 发布:2025-02-06 20:30:37 浏览:126
苹果手机解压怎么打开 发布:2025-02-06 20:29:35 浏览:475
单片机程序存储器 发布:2025-02-06 20:29:31 浏览:208
串的c语言 发布:2025-02-06 20:25:44 浏览:749
编程函数总结 发布:2025-02-06 20:09:11 浏览:316
编程obj 发布:2025-02-06 19:59:52 浏览:844
津贴脚本 发布:2025-02-06 19:44:10 浏览:741
好分数里如何修改密码 发布:2025-02-06 19:42:30 浏览:157