第七章 函数
讲到函数,就涉及的多点了,目前来说,讲c语言中的普通函数,对于c语言函数的理解还没透,现在讲c++,还要有类成员函数,不过现在来说,所有的函数都一样的,函数有返回类型和形参列表所决定,函数名就是个该函数的一个指针,对应一个地址,调用函数的时候,call下这个地址是不是就调用了这个函数??类成员函数看起来是类具有的,网上可以看到,其实它和普通的函数一样,都可以看成c语言那种全局函数,都有自己的地址,只是调用的时候,地址什么的转换了一下,当然这只是我看到的理解,其实是啥,我也不知道,等学深了之后,再好好分析,不管错的,对的,现在还是怎么符合自己的运用逻辑,怎么想吧,万一哪天就顿悟了呢,呵呵。
下面是看c++Primer这本书:
函数由函数名以及一组操作数类型唯一地表示。函数的操作数,也即形参,在一 对圆括号中声明,形参与形参之间以逗号分隔。函数执行的运算在一个称为函数体的块语句中定义。每一个函数都有一个相关联的返回类型。C++ 语言使用调用操作符(即一对圆括号)实现函数的调用。
普通非成员函数:类似于c语言的函数。
类成员函数:独属于类的函数,每个成员函数(static成员函数除外)都有一个额外的、隐含的形参将该成员函数与调用该函数的类对象捆绑在一起。
关于函数的那些事就不多说了,还有什么传址,传值,thiscall,stdcall,cdecl等等高大上的名词,有兴趣慢慢看。。。
函数重载和函数覆盖:无论是类成员函数还是非成员函数,都可视为函数,都具有函数的特性。函数重载是参数列表不同,函数覆盖(重写),是完全一样的函数进行了作用域的覆盖。
内联函数:将函数指定为 inline 函数,(通常)就是将它在程序中每个调用点上“内联地”展开。实现在类定义里的函数都是内联函数。
函数指针:函数指针是指指向函数而非指向对象的指针。像其他指针一样,函数指针也 指向某个特定的类型。 函数类型由其返回类型以及形参表确定, 而与函数名无关。从这里,可以思考,是不是c++除语言本身的语法外,其他所有皆类型,无论是内置类型,还是类类型,哪怕是定义的一个函数,都是类型,类型的对象都有一个存储位置,知道了这个地址,就可以使用它。指向函数的指针可用于调用它所指向的函数。可以不需要使用解引用操作符,直接通过指针调用函数(也可以要)。关于这块的内容,还会有类成员函数的指针等相关知识,所以仍可单独作为一个知识块来学习。现在到了c++11,函数指针有被进一步包装了下,使用更方便。原来函数指针指向非成员函数,指向类static函数,指向类普通成员函数,是有丢丢区别的。
eg:
void f(){ cout<<"f"; }
class A{
public : void Af(){ cout<<"Af"; }
public: static void ff(){cout<<"ff";}
};
typedef void(*pf)();
typedef void(A::*paf)();
pf p = f;
p = &A::ff;
(*p)();
A a;
paf p2 = &A::Af;
(a.*p2)();