C++程序的内存布局
C++程序的内存格局通常分为四个区:
(1)全局数据区(data area):存放全局变量、静态数据、常量。
(2)代码区(code area):存放类成员函数、其他函数代码。
(3)栈区(stack area):存放局部变量、函数参数、返回数据、返回地址。
(4)堆区 (heap area) :自由存储区。
拷贝构造函数
当构造函数的参数为自身类的引用时,这个构造函数称为拷贝构造函数。拷贝构造函数的功能是用一个已有对象初始化一个正在建立的同类对象。
this指针
当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个函数成员所在的对象的指针。成员函数中可以用this关键字来引用该指针。this指针的类型就是成员函数所属的类的类型。当调用成员函数时,它被初始化为被调用函数所在的类实例的地址。
this指针只能在类的成员函数中使用,它指向该成员函数被调用的对象。this指针一般用于返回当前对象自身。this指针大量用于运算符重载成员函数设计中。静态成员函数没有this指针。
运算符重载
运算符的重载形式有两种:重载为类的成员函数和重载为类的友元函数。
<函数类型> operator <运算符>(<形参表>)或friend <函数类型> operator <运算符>(<形参表>)
当运算符重载为类的成员函数时,函数的参数个数比原来的运算数个数要少一个(后缀++、--除外);当重载为类的友元函数时,参数个数与原运算数的个数相同。
单目运算符最好重载为成员函数,而双目运算符则最好重载为友元函数。
在C++中,单目运算符有++和--(后缀有一个int型的参数,而前缀没有)
C++中函数重写和重载有何区别?
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有 相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方 法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。