1、函数重载(overload):在同一作用域中,函数名相同,参数列表不同,则多个函数形成重载
参数列表不通:参数类型不同或者个数不同
CPoint(float _x = 0, _y = 0); //构造函数声明
//默认实例化对象在没有赋值情况下x = 0,y = 0,因此在用此函数时,不能定义无参构造 函数,以免产生二义性;
CPoint::CPoint(float _x ,float _y) //构造函数原型
{
x = _x;
y = _y;
}
2、初始化列表:初始化成员变量
例: CPoint();CPoint c; 则x = 0; y = 0;
CPoint::CPoint()L:x(0),y(0) //x(0) == x = _x;
{
//x = _x;
//y = _y;
}
CPoint(float _x,float _y) => CPoint::CPoint(float _x,float _y):x(_x),y(_y) {}
初始化列表方式用:开始,成员之间用,隔开
⚠️:初始化列表只能出现在构造函数处,(具体:构造函数头之后紧接着冒号开头之后,后面紧跟函数体)
有四种情况必须使用初始化列表:
1)const成员变量
例:Point::Point():x(120){} // x 为const int 类型
Point::Point(int _x,int _y):x(_x)
{
y = _y;
}
2)引用类型的成员变量
3)没有默认构造函数的类类型成员变量(组合)
4)继承中,基类部分的初始化
3、复合类(组合类):一个类的成员变量(属性)是另外一个类的对象,那么前者被称为复合类。
⚠️:组合类中的构造函数调用(先调用属性对象的‘构造函数’,再初始化另外部分)
友元函数和友元类
1、友元:可以直接访问私有成员(破坏了数据安全)
2、友元函数:friend、不是成员函数,可以直接访问类的私有成员的非成员函数
函数调用:
普通函数:函数名
成员函数:对象.函数名
3、友元类:friend
如果类A是类B的友元类,那么A中的所有成员函数都是类B的友元函数