成员函数在调用时已经捆绑了对象,其实已经含有对象参数了。
成员函数一定从属于类,不能独立存在,因此在定义成员函数时,必须在前面冠以类名。
定义完一个类以后,一定要加上一个":",切记,切记。
在类中实现的成员函数被默认为内联函数,达到最佳的运行效果,但由于内联函数的实现的机制,导致了不是所有的成员函数都要在类中实现,一般短小,不含循环的函数在类中实现。
使用对象指针:一个类可以创建无数个对象,任何一个对象可以使用该类的操作,即调用该类的成员函数,此对象和彼对象调用成员函数的结果是不同的,他们在不同的对象上反映出来,
所以调用成员函数一定是与某个对象捆绑在一起的。
即objectName.memberFunction(parameters),
如果对象是以对象指针间接访问的形式操作的,
即objectName->memberFunction(parameters)。或者(*objectName)->memberFunction(parameters)
实例:Date *dp=new Date(指针要赋初值的)
dp->function();
(*dp).function();
常成员函数:如果对对象只进行读操作,不改变对象的值,可以设计为常成员函数。
实例: bool isLeapYear()const:
重载成员函数:C++编译器能够根据函数参数的类型,数量和排列顺序的差异,来区分同名函数,其技术成为重载函数,相应的同名函数成为重载函数,重载技术化解了一部分名称命名问题,但更重要的是在编程逻辑上,亲近了人类的自然思维,方便了表达。
重载函数匹配:只要参数个数不同,参数类型不同,参数顺序不同,函数就可以重载,然而,返回类型不同则不可以函数重载
C++用名称压轧技术来改变函数名,区分参数不同的同名函数,即一系列代码被附加到函数名上以标记参数类型以及他们出现的次序
实例:int func(char a) 和int func(char a,int b,double c)经压轧后变成:func_c和func_cid,
默认参数只能从后往前设置
操作符重载:
实例:返回类型 operator 操作符(参数列表)
在重载操作符的定义中,参数列表中参数的个数取决于两个因素:1 操作符是一元操作符还是二元操作符 2 把操作符定义为类成员函数还是全局函数。
不可以重载的操作符是 :: . .* ?: sizeof typeof
在设计函数时,参数若为类类型,则一般使用引用型,若为内部数据类型,则不用引用型,这是重要的经验之谈
静态成员:有一些属性不是类中每个对象分别拥有的,而是共有的,类的静态成员,保证每个类只有一个实体,每个对象中不再有他的副本,由于静态成员脱离对象而存在,所以该实体应在所有对象产生之前存在,因此,更适当的时间是在程序启动的时候,做其初始化。把静态常用做成私有的,用静态成员函数去访问静态数据成员是合适的
静态成员函数如果不在类中实现,而在类的外部实现,类名前应免去static关键字,成员函数的静态性在第一次声明的时候才是必要的