C++学习 构造函数与复制构造函数

本文深入探讨了构造函数在初始化成员变量、复制构造函数的机制、以及在堆和栈中创建对象的区别。同时,解释了默认构造函数的自动创建与自定义构造函数的重要性,并阐述了如何在堆中创建对象及其析构过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

=============在构造函数的函数头初始化==============
#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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值