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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章