C语言中的结构体是不能有函数和构造函数的,但是C++中的结构体是可以有函数的。
事实上C++中的类也是由构造函数发展而来的。
有了构造函数,就可以对结构体中的变量进行简单的初始化。
以下是一种初始化方法:
#include <IOSTREAM>
using namespace std;
typedef struct AVRNode
{
double a;
double z;
AVRNode(){}
AVRNode(double& e,double zc=12):a(e),z(zc){}
}AVRNode,*AVR;
int main()
{
double ac=13;
struct AVRNode *t;
t=new AVRNode(ac);
cout<<t->a<<endl;
return 0;
}
这里new 了一个结构体,new一个结构体与new一个对象的方法是一样的。
注意这里给结构体中的变量a赋值的时候,结构体必须是一个指针,否则会出现语法错误。因为new返回的是一个指针
new创建的对象,要用delete结束其生命周期,否则一直存在。
new创建对象与直接定义来创建对象的区别在于:
new创建对象是在堆上进行的,而直接定义对象是在栈上进行的。栈时在程序运行前就分配好的,不需要自己释放,而堆是在程序运行的时候分配的,得自己释放。由于堆的内存比较大,所以new对象可以很好地利用空间,但是还要在一定时候回收内存,所以比较麻烦。直接定义的方式能使得程序结构清楚,容易理解,但是受内存限制较大,在递归的时候容易发生内存溢出.