=============在构造函数的函数头初始化==============
#include<iostream>
using namespace std;
class Rectangle
{
public:
Rectangle():width(2),length(5){cout<<"面积为:"<<width*length;} 初始化成员变量
Rectangle(int x, int y):width(x),length(y){} 带参数的 初始化成员变量
//Rectangle(){length=3;width=5;cout<<"面积为:"<<width*length;} 赋值成员变量
private:
const int width; //常量和引用只能被初始化,不能被赋值
int length; //因此最好在构造函数的函数头对常量和引用进行初始化
};
int main(void)
{
Rectangle r;
return 0;
}
【构造函数中,常量和引用的初始化】
#include<iostream>
using namespace std;
class A
{
public:
A(int i,int j):length(i),width(j){}
private:
const int length;
int &width;
};
int main(void)
{
A a(1,2);
return 0;
}
=============复制构造函数==============
默认复制构造函数的机制
#include<iostream>
using namespace std;
class A
{
public :
A(int i,int j){len=i;width=j;}
A(A&one){len = one.len; width=one.width;} //默认构造函数 参数是类A对象的引用
int area(){return len*width;}
private:
int len;
int width;
};
int main(void)
{
A a(5,2);
cout<<a.area()<<endl;
A b(a); //传递类A的对象a 调用默认复制构造函数
cout<<b.area()<<endl;
return 0;
}
=============构造函数和NEW运算符==============
【堆和栈】
栈是由是由系统自动分配的,因此速度快。但是缺点是可存放的空间较小,只有2M
假如要存放比较大的数据,栈显然不行,那么就要放到堆里。
堆是一大堆不连续的内存区域,在系统中由链表将它们连接起来,因此空间可以很大
【两者不基本不同点:】
1栈有系统自动分配、释放,堆由程序员申请、释放
2栈的空间小,仅2M,堆的上限是由系统的有效虚拟内存来定的,因此获得的空间较大
【默认构造函数】
每个对象在创建时都要调用构造函数来为自己初始化
假如你没提供构造函数,那么编译器就会自动创建一个默认的构造函数
假如你创建了一个构造函数,不管你创建的是默认的构造函数很是带参数的构造函数
编译器都不会再提供任何默认构造函数。假如还需要不带参数的构造函数,就必须自己创建
【在堆中创建的对象,是没有名字的,必须将这个对象的内存地址返回给一个指针,然后进行操作】
new int 在堆中创建了一个int型的内存空间,返回一个指向这块内存的地址
int *p=new int
delete p; 当使用delete删除某个对象时,它会自动调用析构函数来释放这个对象所占内存
#include<iostream>
using namespace std;
class A
{
public:
A(){cout<<"调用构造函数!~"<<endl;}
~A(){cout<<"调用析构函数!~"<<endl;}
};
int main(void)
{
A *p = new A; 在堆中创建一个类A的对象,调用构造函数
delete p; 删除对象,调用析构函数
return 0;
}