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

构造函数
可以参考: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

发布了47 篇原创文章 · 获赞 6 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章