程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 第13章 復制控制(7)

第13章 復制控制(7)

編輯:C++入門知識

13.5.2 定義值型類
具有值語義的類所定義的對象,其行為很像算術類型的對象,反之亦然。string類是值型類的一個例子。
復制構造函數不再復制指針,它將分配一個新的int對象,並初始化該對象以保存與被復制對象相同的值。每個對象都保存屬於自己的int值的不同副本。因為每個對象保存自己的副本,所以析構函數將無條件刪除指針。
賦值操作符不需要分配新對象,它只是必須記得給其指針所指向的對象賦新值,而不是給指針本身賦值。
改變的是指針所指向的值,而不是指針。

class HasPtr 

public: 
    HasPtr(const int &p, int i):ptr(new int(p)), val(i){} 
    HasPtr(const HasPtr &orig):ptr(new int(*orig.ptr)), val(orig.val){} 
    HasPtr &operator= (const HasPtr &); 
    ~HasPtr(){ 
        delete ptr; 
    } 
    int *get_ptr() const{ return ptr; } 
    int get_int() const{ return val; } 
    void set_ptr(int *p){ ptr=p; } 
    void set_int(int i){ val=i; } 
    int get_ptr_val() const{ return *ptr;} 
    void set_ptr_val(int val) const {*ptr = val;} 
private: 
    int *ptr; 
    int val; 
}; 
 
HasPtr &HasPtr::operator= (const HasPtr &hasptr) 

    *ptr = *hasptr.ptr;   
    val = hasptr.val; 
    return *this; 

即使要將一個對象賦值給它本身。賦值操作符也必須總是保證正確。本例中,即使左右操作數相同,操作本質上也是安全的,因此,不需要顯式檢查自身賦值。

摘自 xufei96的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved