一、构造函数
1、与类同名
2、可以在构造函数中给成员成员变量直接赋值
class Date
{
public:
Date(int y = 0 , int m = 0, int d = 0):year(y),month(m),day(d){};
private:
int year ;
int month ;
int day;
}
二、运算符重载
<返回类型说明符>operator<运算符符号> (<参数表>)
{ <函数体>
}
重载成员函数,隐藏一个参数,该参数是this指针。this为调用该成员函数
对象的指针。
三、参数传递
1、大部分情况下参数传递用引用,引用只有四个字节
2、参数不变情况下,加上const
四、摘录
1、内联函数:
a、是指用inline关键字修饰的函数。在类内定义的函数被默认成内联函数。
b、内联扩展是用来消除函数调用时的时间开销。它通常用于频繁执行的函数。 一个小内存空间的函数非常受益。
c、如果没有内联函数,编译器可以决定哪些函数内联 。 程序员很少或没有控制哪些只能是内联的,哪些不是的权利,作用是程序员可以选择内联的特定应用
d、在一个文件中定义的内联函数不能在另一个文件中使用。它们通常放在头文件中共享。
e、内联函数应该简洁,只有几个语句,如果语句较多,不适合于定义为内联函数。
f、内联函数体中,不能有循环语句、if语句或switch语句,否则,函数定义时即使有inline关键字,编译器也会把该函数作为非内联函数处理。
g、内联函数要在函数被调用之前声明。关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。
h、相当于宏但比宏好
2.友元函数
https://wenku.baidu.com/view/fb3df37001f69e314332943e.html
类有成员变量和成员函数。而函数中,不是任何一个类的成员的函数,就是非成员函数。例如:
class A{
public:
voidf1(){}; // 这个就是成员函数。
void f2(); // 这个也是成员函数声明,其实现在类的外部。
};
void A::f2(){} // 这个是成员函数的实现。
void f3(){}; // 这个就是非成员函数,它不属于A,也不属于任何一起其他的类。
3.操作符重载
①、C++中的运算符除了少数几个之外,全部可以重载,而且只能重载C++中已有的运算符。②、重载之后运算符的优先级和结合性都不会改变。③、运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来说,重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。不能重载的运算符只有五个,它们是:成员运算符“.”、指针运算符“*”、作用域运算符“::”、“sizeof”、条件运算符“?:”。运算符重载形式有两种,重载为类的成员函数和重载为类的友元函数。运算符重载为类的成员函数的一般语法形式为:
函数类型operator运算符(形参表)
{
函数体;
}
//运算符重载为类的友元函数的一般语法形式为:
friend函数类型operator运算符(形参表)
{
函数体;
}
其中,函数类型就是运算结果类型;operator是定义运算符重载函数的关键字;运算符是重载的运算符名称。当运算符重载为类的成员函数时,函数的参数个数比原来的操作个数要少一个;当重载为类的友元函数时,参数个数与原操作数个数相同。原因是重载为类的成员函数时,如果某个对象使用重载了的成员函数,自身的数据可以直接访问,就不需要再放在参数表中进行传递,少了的操作数就是该对象本身。而重载为友元函数时,友元函数对某个对象的数据进行操作,就必须通过该对象的名称来进行,因此使用到的参数都要进行传递,操作数的个数就不会有变化。