c++中什么是操作符函数?
2个回答
展开全部
这个操作符是两个操作符组成的,一个是点.一个是星*这两个操作符在c++中都有自己的作用.主要用处一般.是成员调用,*为取地址处的值.而.*在一起连续使用的情况有很多.比如
class
ob
{
char*p;
}
ob
temp;
temp.*p;调用成员p指针处的值.
但是.*两个操作符连在一起被称为一个操作符的情况只有一种,那就是在成员函数指针的调用上.
成员函数指针与普通函数指针有很大差别,所以c++为成员函数指针制定了一系列操作符.*就是其中一个.还是举例说明一下吧,我来想想怎么举....
class
ob
{
void
fcun(){}
};//类ob内有函数func;
typedef
void(ob::*pobfunc)();//成员函数指针类型
pobfunc
p=&ob::func;//定义成员函数指针p指向函数func
ob
temp;//定义ob类对象temp
(temp.*p)();使用对象temp加上.*运算符调用p指向的成员函数
有问题再追问
class
ob
{
char*p;
}
ob
temp;
temp.*p;调用成员p指针处的值.
但是.*两个操作符连在一起被称为一个操作符的情况只有一种,那就是在成员函数指针的调用上.
成员函数指针与普通函数指针有很大差别,所以c++为成员函数指针制定了一系列操作符.*就是其中一个.还是举例说明一下吧,我来想想怎么举....
class
ob
{
void
fcun(){}
};//类ob内有函数func;
typedef
void(ob::*pobfunc)();//成员函数指针类型
pobfunc
p=&ob::func;//定义成员函数指针p指向函数func
ob
temp;//定义ob类对象temp
(temp.*p)();使用对象temp加上.*运算符调用p指向的成员函数
有问题再追问
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
操作符函数也叫运算符重载
运算符重载的2种方法
(1)运算符重载为成员函数
(a)对于双目运算符op,如果要重载op为某类的成员函数,使之能够实现表达式
k
op
t,其中k为A类的对象,则应当把op重载为A类的成员函数,该函数只有一个形参,形参的类型是t所属的类型。经过这样重载之后,表达式
k
op
t
就相当于函数调用k.operator
op(
t
)
(b)对于前置单目运算符U(如负号“-”),若要重载U为类的成员函数,用来实现表达式
U
oprd,其中oprd为A类的对象,则U应当重载为A类的成员函数,且该函数不带形参。经过重载之后,表达式U
oprd
就相当于函数调用oprd.operator
U()。
(b)后置运算符“++”和“--”,若要将它们重载为类的成员函数,用来实现表达式oprd++或oprd--,其中oprd为A类的对象,那么就应当重载这2个运算符为A类的成员函数,这时函数要带有一个整型(int)形参。重载之后,表达式
oprd
++
和
oprd
--
就分别相当于函数调用oprd.operator
++(0)
和
oprd.operator
--(0)。
(2)运算符重载为友元函数
(a)对于双目运算符op,如果它的一个操作数为类A的对象,就可以将op重载为A类的友元函数,该函数有两个形参,其中一个形参的类型是A类。经过这样的重载之后,表达式k
op
t就相当于函数调用operator
op(
k,
t
)
(b)对于前置单目运算符U(如负号“-”),若要实现表达式
U
oprd
其中oprd为A类的对象,则U可以重载为A类的友元函数,函数的形参为A类的对象oprd。经过重载之后,表达式
U
oprd
就相当于函数调用operator
U(
oprd
)
(c)对于后置运算符“++”和“--”,如果要实现表达式
oprd
++
或
oprd
--,
其中oprd为A类的对象,那么运算符就可以重载为A类的友元函数,这时函数的形参有两个,一个是A类的对象oprd,另一个是整型(int)形参。第二个参数是用于与前置运算符函数相区别的。重载之后,表达式oprd
++
和
oprd
--
就分别相当于函数调用operator
++
(oprd,
0)
和operator
--
(oprd,
0)。
(3)两种重载方法的比较
一般说来,单目运算符最好被重载为成员;对双目运算符最好被重载为友元函数,双目运算符重载为友元函数比重载为成员函数更方便,但是,有的双目运算符还是重载为成员函数为好,例如,赋值运算符。因为,它如果被重载为友元函数,将会出现与赋值语义不一致的地方。
运算符重载的2种方法
(1)运算符重载为成员函数
(a)对于双目运算符op,如果要重载op为某类的成员函数,使之能够实现表达式
k
op
t,其中k为A类的对象,则应当把op重载为A类的成员函数,该函数只有一个形参,形参的类型是t所属的类型。经过这样重载之后,表达式
k
op
t
就相当于函数调用k.operator
op(
t
)
(b)对于前置单目运算符U(如负号“-”),若要重载U为类的成员函数,用来实现表达式
U
oprd,其中oprd为A类的对象,则U应当重载为A类的成员函数,且该函数不带形参。经过重载之后,表达式U
oprd
就相当于函数调用oprd.operator
U()。
(b)后置运算符“++”和“--”,若要将它们重载为类的成员函数,用来实现表达式oprd++或oprd--,其中oprd为A类的对象,那么就应当重载这2个运算符为A类的成员函数,这时函数要带有一个整型(int)形参。重载之后,表达式
oprd
++
和
oprd
--
就分别相当于函数调用oprd.operator
++(0)
和
oprd.operator
--(0)。
(2)运算符重载为友元函数
(a)对于双目运算符op,如果它的一个操作数为类A的对象,就可以将op重载为A类的友元函数,该函数有两个形参,其中一个形参的类型是A类。经过这样的重载之后,表达式k
op
t就相当于函数调用operator
op(
k,
t
)
(b)对于前置单目运算符U(如负号“-”),若要实现表达式
U
oprd
其中oprd为A类的对象,则U可以重载为A类的友元函数,函数的形参为A类的对象oprd。经过重载之后,表达式
U
oprd
就相当于函数调用operator
U(
oprd
)
(c)对于后置运算符“++”和“--”,如果要实现表达式
oprd
++
或
oprd
--,
其中oprd为A类的对象,那么运算符就可以重载为A类的友元函数,这时函数的形参有两个,一个是A类的对象oprd,另一个是整型(int)形参。第二个参数是用于与前置运算符函数相区别的。重载之后,表达式oprd
++
和
oprd
--
就分别相当于函数调用operator
++
(oprd,
0)
和operator
--
(oprd,
0)。
(3)两种重载方法的比较
一般说来,单目运算符最好被重载为成员;对双目运算符最好被重载为友元函数,双目运算符重载为友元函数比重载为成员函数更方便,但是,有的双目运算符还是重载为成员函数为好,例如,赋值运算符。因为,它如果被重载为友元函数,将会出现与赋值语义不一致的地方。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询