大家好,在这一小节中,我们来介绍一下内联成员函数和重载成员函数。
在第一周的课里呢,郭老师已经介绍了内联函数的定义。
那么内联函数呢,其实就考虑到了
一类特殊的函数,它自身的这个语句呢非常的少,运行起来呢也非常的快,
那么在这种情况下,由于函数调用是会产生一定的调用语句,
那么当你这个函数被反复的调用到时,就会产生非常大的调用开销,
于是呢, 我们就定义了这样一类内联函数
去实现这个当编译器访问的时候,
那么看到内联函数了呢,它就会把这一系列函数定义的这些语句呢插入到调用的这个地方,
就不会产生额外的调用开销了。那么成员函数呢,也可以被定义为是内联的。
那么内联成员函数呢,有这样两种方式可以定义。 首先呢,就是使用inline关键字。
那么,它使用完之后呢,后面跟上相应的成员函数就可以被定义为是内联成员函数。
此外呢,也可以简单将函数体写在类的定义内部,它同样也是将这个函数
定义为是内联成员函数。我们来具体看一下。
对于class B来讲呢,它包含了两个函数 分别是function 1和function
2,那么这两个函数呢都被定义成内联了, 第一种呢,就是去使用inline关键字去定义function
1, 那么这时候呢,function的声明呢可以放在类里面,
但是它具体的定义呢是可以放在类外的。
那么注意呢,因为它是一个成员函数,所以呢要声明说
前面呢要使用到这样的一个B:: 去定义说啊,它是属于class
B的, 那么除此之外呢,第二种去定义内联成员函数的方式
就是将整个函数体比如说function 2
的实现全部放在类定义内部,那么它同样也是
标志着是内联成员函数。
除了内联成员函数之外呢,成员函数还可以去实现重载。
那么,函数的重载呢,就是指说
对于具有相同的函数名的一类函数,
因为它本身呢是包含了一个或者多个不同的参数,或者参数本身的类型不同,
所导致的。那么这样的方式呢都被称为叫做函数的重载。
那么同样,成员函数呢也可以进行重载。
此外呢,成员函数自身呢,是可以带有缺省的参数的。
那么在C++语法当中呢规定说, 函数在写的时候呢,可以有让参数呢有缺省值,
那么在调用函数的时候如果你不写参数,参数呢就是缺省值。
我们来看这个具体的例子。 我们定义一个class成为叫Location,
那么它中间呢有两个成员变量,x和y,
此外呢还有三个成员函数。 那么这三个成员函数分别呢是init,
啊,初始化x和y,注意呢,这边对init函数里面的参数我们就
已经规定了它的缺省值,
除此之外呢,还定义了两个具有同名的函数,都是呢valueX,
那么,这就是一个典型的
成员函数重载。注意,他们因为参数
不同,一个是要传int型的,一个变量,而另外一个呢,是没有参数的,
那么这样两个参,这样两个函数呢,因为参数的不同,
所以被标记为两个不同的函数,啊,虽然是同名的,
那么这两个函数自身呢它的作用也是不一样的,
第一个函数呢,是用来给x去赋值,第二个呢,只是去返回x的值。
那么我们来看一眼。有了这样两个重载函数之后,
具体的使用。我们在main函数里面,那当然首先你要去定义一个对象,
Location呢,对应的一个对象呢称为A,那么A呢,它可以去初始化,
那么初始化的时候,我们看到其实init函数是包含了两个参数的。
但是这里呢,只有一个,就是5,
那么它依次呢,实际上去初始化这个x和y,所以呢,5就被赋给了x,
而相应的y呢,
那么我们就可以使用刚才init函数的缺省参数,
也就是0,来对具体的这个小y进行赋值。 那么,
init函数之后呢,就是A.valueX(5),
那么这时候你看到了,这个函数的调用的时候它是有参的,
那么就意味着它调用的成员函数是哪一个呢?是刚才第一个
成员函数,啊,也就是valueX
后面有具体参数的 那样的一个函数,
而cout同样是A.valueX,但是它没有参数,
所以呢,它调用的是第二个函数, 也就是valueX
具有空参的那样的一个函数。
那么它实际上只是去返回一个x的值。
所以,这就可以看到说使用不同的函数,由于有了函数的重载,
所以它可以是同名的。但是它的功能是不一样的。
那么对应这时候cout的输出是什么呢?cout的输出是5啊。