1. 程式人生 > >劍指offer:關於復制構造函數

劍指offer:關於復制構造函數

一份 修飾 意思 自己的 正常 out 參考 問題 函數

1:首先參看代碼:

技術分享
#include "stdafx.h"
#include "iostream"
using namespace std;
class A
{
private:
    int value;
public:
    A(int n)
    {
        value=n;
    }

    //A(A other)!!這是錯誤的
    // 復制構造函數參數為類對象本身的引用,用於根據一個已存在的對象復制出一個新的該類的對象,一般在函數中會將已存在對象的數據成員的值復制一份到新創建的對象中
    // 若沒有顯示的寫復制構造函數,則系統會默認創建一個復制構造函數,但當類中有指針成員時,由系統默認創建該復制構造函數會存在風險
A(const A& other)//定義自己的復制構造函數都是如此格式 { value=other.value; } void Print() { std::cout<<value<<std::endl; } }; int main(int argc, char* argv[]) { A a=10; A b=a; b.Print(); return 0; }
View Code

2:分析之自己定義復制構造函數的格式為:A(const A& other);

3:註意一個問題:主函數中用的語句是:A a=10;正常情況下應該為:A a(10);,因為類中只有一個成員變量,所以上列代碼可行。應該改為如下代碼:

技術分享
#include "stdafx.h"
#include "iostream"
using namespace std;
class A
{
private:
    int value;
public:
    A(int n)
    {
        value=n;
    }

    //A(A other)!!這是錯誤的
    // 復制構造函數參數為類對象本身的引用,用於根據一個已存在的對象復制出一個新的該類的對象,一般在函數中會將已存在對象的數據成員的值復制一份到新創建的對象中
    
// 若沒有顯示的寫復制構造函數,則系統會默認創建一個復制構造函數,但當類中有指針成員時,由系統默認創建該復制構造函數會存在風險 A(const A& other)//定義自己的復制構造函數都是如此格式 { value=other.value; } void Print() { std::cout<<value<<std::endl; } }; int main(int argc, char* argv[]) { A a(10); A b=a; b.Print(); return 0; }
View Code

4:下面研究如何復制一個對象。復制構造函數正常的格式為:A(A &other);,自定義復制構造函數的格式為:類名(類名 &形參),因此正常情況下代碼如下:

技術分享
#include "stdafx.h"
#include "iostream"
using namespace std;
class A
{
private:
    int value;
public:
    A(int n)
    {
        value=n;
    }

    //A(A other)!!這是錯誤的
    // 復制構造函數參數為類對象本身的引用,用於根據一個已存在的對象復制出一個新的該類的對象,一般在函數中會將已存在對象的數據成員的值復制一份到新創建的對象中
    // 若沒有顯示的寫復制構造函數,則系統會默認創建一個復制構造函數,但當類中有指針成員時,由系統默認創建該復制構造函數會存在風險
    A(A &other)//定義自己的復制構造函數都是如此格式
    {
        value=other.value;
    }

    void Print()
    {
        std::cout<<value<<std::endl;
    }
};
int main(int argc, char* argv[])
{
    
    A a(10);
    A b=a;
    b.Print();
    return 0;
}
View Code

5:但是程序中加入了一個const,這個知識點可以參考const對象。當創建一個對象後,如果不希望它的任何數據發生改變,可以將其直接聲明為const對象。

6:const關鍵字修飾變量或者函數時,其意思通常是“只讀”。比如,當const修飾變量時,變量的值不能改變,當

劍指offer:關於復制構造函數