c++构造函数 && 拷贝,赋值,析构

时间:2021-08-24 19:27:42

构造函数
可以参考:http://www.cnblogs.com/xkfz007/archive/2012/05/11/2496447.html
作用:为对象成员变量赋初始值。new运算符一起使用
注意:
1.构造函数的命名必须和类名完全相同
2.没有返回值,即不用在定义时加返回值类型(void int float之类的)
3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用

拷贝函数
可自定义:思路就是赋值(或复制)

析构函数
1.no malloc no free
no new no delete
只有用new或者malloc分配的才需要,string类的析构函数会自己负责释放。
2.C++中的delete和delete[]的区别:
new单个对象~要用delete释放内存空间
new[]类对象数组~要用delete[]释放内存空间
详情参考:
http://www.cnblogs.com/charley_yang/archive/2010/12/08/1899982.html

自己写了个简单的程序:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string.h>

using namespace std;

class MyLove
{
public:
MyLove() {} //缺省构造函数
MyLove(char *HisName, char *Hisheight) //构造函数
{
name = new char[strlen(HisName) + 100];
strcpy(name, HisName);
height = new char[strlen(Hisheight) + 100];
strcpy(height, Hisheight);
}


void Cout_name() { cout << name << " "; }
void Cout_height() { cout << height << " "; }
void change(MyLove &a) //拷贝构造函数
{
strcpy(name, a.name);
strcpy(height, a.height);
};
~MyLove()
{
delete[] name;
delete[] height;
}
private:
char *name = "abc";
char *height = "100";

};


int main()
{
MyLove idol1("Bosco", "180");
MyLove idol2("pakho", "181");
MyLove mum("Ying", "170");
MyLove brother("Heng", "172");
cout << "before copy:" << endl;
idol1.Cout_name();
idol1.Cout_height();
cout << endl;
mum.Cout_name();
mum.Cout_height();
cout << endl;
brother.Cout_name();
brother.Cout_height();
cout << endl;
cout << "-----------我是分割线-----------" << endl;
cout << "after copy:" << endl;
idol2.change(mum);
idol2.Cout_name();
idol2.Cout_height();
cout << endl;
return 0;
}

VS中设置#define _CRT_SECURE_NO_WARNINGS的两种方式:
http://www.cnblogs.com/ttss/p/4161815.html