构造函数与析构函数

本文通过实例详细探讨了C++中类的构造函数与析构函数的执行时机,包括在main函数内外、不同函数内部以及作为全局变量时的调用情况,为理解C++对象生命周期提供实践指南。

       学习编程已快三年,前段时间一直好高鹜远,老想着做一些很牛B的东西。经过两三个项目后,老觉得很飘,没有一种脚踏实地的感觉。现在只想好好地补补基础知识,一切从今天开始。学习的东西记录到这里,方便以后重温。

      类的构造与析构应该是最基础的东西了,可是现在对一些概念还不是很清晰,写了几段代码,证明一下。

      首选定义一个类CParent(以后学习继承还有这个类,所以类名定义成这样),定义如下:

class CParent
{
public:
    CParent(void);
    ~CParent(void);
};
 
很简单的一个类,只有一个构造函数与一个析构函数,两个函数的实现如下:
CParent::CParent(void)
{
    cout<<"run constructor of CParent"<<endl;
}

CParent::~CParent(void)
{
    cout<<"run destructor  of CParent"<<endl;
}

 

建立一个控制台win32程序,实现main函数如下:

#include<iostream>
using namespace std;
#include"Parent.h"

int main()
{
    cout<<"Begin of main function"<<endl;
    cout<<"End of main function"<<endl;
    return 0;
}
 
在不同地方实例化CParent类,看下构造函数与析构函数何时执行。
 
首先在main函数中建立CParent类
int main()
{
    cout<<"Begin of main function"<<endl;
    CParent Object;
    cout<<"End of main function"<<endl;
    return 0;
}

程序运行结果如下:

Begin of main function
run constructor of CParent
End of main function
run destructor  of CParent
可以看出,构造函数在main内部创建对象时执行,析构函数要等到main函数结束自动执行。
 
下面看看在其它函数内部创建CParent对象时,又是什么情况
新添一个函数FuncA(),同时修改main函数,代码如下。
void FuncA()
{
    cout<<"Begin of FuncA"<<endl;
    CParent Object;
    cout<<"End of FuncA"<<endl;
}

int main()
{
    cout<<"Begin of main function"<<endl;
    FuncA();
    cout<<"End of main function"<<endl;
    return 0;
}

程序运行结果如下:

Begin of main function
Begin of FuncA
run constructor of CParent
End of FuncA
run destructor  of CParent
End of main function

构造函数创建对象时执行,析构函数在FuncA结束后,返回main函数之前执行。

如果是定义一个全局变量的对象呢?代码如下:

CParent object;

int main()
{
    cout<<"Begin of main function"<<endl;
    cout<<"End of main function"<<endl;
    return 0;
}

运行结果:

run constructor of CParent
Begin of main function
End of main function
run destructor  of CParent

如果是用new呢?

int main()
{
    cout<<"Begin of main function"<<endl;
    CParent *p=new CParent();
    cout<<"End of main function"<<endl;
    return 0;
}

运行结果:

Begin of main function
run constructor of CParent
End of main function
可以看出,定义全局变量,及使用new 关键字创建对象,虽然对象都是存储在堆上,但创建全局变量的方法最后程序会把对象销废,而使用new关键字却不会。

转载于:https://www.cnblogs.com/Zimmem/articles/1121881.html

Matlab基于粒子群优化算法及鲁棒MPPT控制器提高光伏并网的效率内容概要:本文围绕Matlab在电力系统优化控制领域的应用展开,重点介绍了基于粒子群优化算法(PSO)和鲁棒MPPT控制器提升光伏并网效率的技术方案。通过Matlab代码实现,结合智能优化算法先进控制策略,对光伏发电系统的最大功率点跟踪进行优化,有效提高了系统在不同光照条件下的能量转换效率和并网稳定性。同时,文档还涵盖了多种电力系统应用场景,如微电网调度、储能配置、鲁棒控制等,展示了Matlab在科研复现工程仿真中的强大能力。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事新能源系统开发的工程师;尤其适合关注光伏并网技术、智能优化算法应用MPPT控制策略研究的专业人士。; 使用场景及目标:①利用粒子群算法优化光伏系统MPPT控制器参数,提升动态响应速度稳态精度;②研究鲁棒控制策略在光伏并网系统中的抗干扰能力;③复现已发表的高水平论文(如EI、SCI)中的仿真案例,支撑科研项目学术写作。; 阅读建议:建议结合文中提供的Matlab代码Simulink模型进行实践操作,重点关注算法实现细节系统参数设置,同时参考链接中的完整资源下载以获取更多复现实例,加深对优化算法控制系统设计的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值