1.复制构造函数
形如X::X(X&)或X:X(const X&)的构造函数。它只能有一个参数,即同类对象的引用。
如果没有自己定义,系统生成默认的复制构造函数,完成复制功能。
它仅在下面三种情况下起作用:
- 当用一个对象去初始化同类的另一个对象
Complex c2(c1); Complex c2 = c1;
- 某个函数有参数是类A的对象,则该函数被调用时,类A的复制构造函数也被调用。
void Func(A a1){} int main(){ A a2; Func(a2); return 0; }
- 函数返回值是类A的对象,函数返回时,A的复制构造函数被调用。
A func(){ A b(4); return b; //返回了A的对象 } int main(){Func();}//此时类A的复制构造函数也会被调用。
2.类型转换构造函数
话不多说,直接上例子
c1 = 9,其就相当于 c1 = Complex(9);
3.静态成员函数/变量
实际上就是全局函数和变量。设计这一概念主要为了增强某些变量与类的关联性。
静态成员函数并不具体作用与某个对象。静态成员变量占一份地址,为所有对象共享。
class A{
private:
int x,y;
static int totalX;
static int totalY;
public:
static void printTotal();
}
记住一点,sizeof运算符不会计算静态的成员变量。
4. 友元函数/类
1.友元函数
class A{
public:
void aFunc(B* b);
};
class B{
private:
int p;
friend int bFunc(int x);//全局函数
friend void A::aFunc(B *b);//在class B中声明友元,bFunc和aFunc都可以访问classB的私有成员
一个类的友元函数可以访问该类的私有成员
}
2.友元类
class A{
private:
int p;
friend class B;//声明B是它的友元类
}
class B{
public:
A a;
void funcB(){
a.p+=100;//B是A的友元类,所以B中的成员函数可以访问A的私有成员
}
注意:
- 声明友元,在被当做友元的类中声明,即我宣布谁是我的朋友。
- 友元关系不能传递和继承。