重載賦值運算符

来源:https://www.cnblogs.com/overlows/archive/2019/05/02/10803342.html
-Advertisement-
Play Games

``` // // main.cpp // 運算符重載(Overloading) // 預設複製構造函數(Default Copy Constructor) // Created by mac on 2019/4/29. // Copyright © 2019年 mac. All rights re ...


//
//  main.cpp
//  運算符重載(Overloading)
//  預設複製構造函數(Default Copy Constructor)
//  Created by mac on 2019/4/29.
//  Copyright © 2019年 mac. All rights reserved.
//  析構函數是一個成員函數,當對象被銷毀時,該函數被自動調用。
//  析構函數是具有與類相同名稱的公共(public)成員函數
//  構造函數私有化之後就無法在類外生成對象。
//  結構體能否支持繼承
//  複製構造函數只能在創建對象併在初始化對象時起作用,複製構造函數不能在賦值(Assignment)中調用。
//  複製構造函數開始有點遺忘了。


#include <iostream>
#include <iomanip>

using namespace std;

class NumberArray{
private:
    double *aPtr;
    int arraySize;

public:
    NumberArray & operator= (const NumberArray &right);//重載賦值運算符=      (重載運算符函數)
    ~NumberArray(){if (arraySize>0) delete []aPtr;}
    NumberArray(const NumberArray &);
    NumberArray(int size,double value);
    void print()const;
    void setValue(double value);
};

//重載賦值運算符=
NumberArray & NumberArray::operator=(const NumberArray &right){
    if(this!=&right){
        if(this->arraySize>0){
            delete [] aPtr;
        }
        
        this->arraySize=right.arraySize;
        aPtr=new double[this->arraySize];
        for (int index=0; index<arraySize; ++index) {
            this->aPtr[index]=right.aPtr[index];
        }
        
    }
    return *this;
}

//複製構造函數
NumberArray::NumberArray(const NumberArray &obj){
    if(this->arraySize>0){
        delete [] aPtr;
    }
    this->arraySize=obj.arraySize;
    aPtr=new double[this->arraySize];
    for (int index=0; index<this->arraySize; ++index) {
        aPtr[index]=obj.aPtr[index];
    }
    
}

//構造函數
NumberArray::NumberArray(int size,double value){
    this->arraySize=size;
    aPtr=new double[arraySize];
    setValue(value);
}

//用value值初始化整個數組
void NumberArray::setValue(double value){
    for (int index=0; index<this->arraySize; ++index) {
        aPtr[index]=value;
    }
    
}

//列印整個數組
void NumberArray::print()const{
    for (int index=0;index<arraySize; ++index) {
        cout<<aPtr[index]<<" ";
    }
}

int main(int argc, const char * argv[]) {
    NumberArray first(3,10.5);
    NumberArray second(5,20.5);
    cout<<setprecision(2)<<fixed<<showpoint;
    cout<<"First object's data is ";
    first.print();
    cout<<endl<<"Second object's data is ";
    second.print();
    
    //調用重載運算符
    cout<<"\nNow we will assign the second object "<<"to the first."<<endl;
    
    first=second;
    
    //列印賦值以後兩個對象裡面的新的值
    cout<<"First object's data is ";
    first.print();
    cout<<endl<<"Second object's data is ";
    second.print();
    
    return 0;
}

運行結果:

First object's data is 10.50 10.50 10.50 
Second object's data is 20.50 20.50 20.50 20.50 20.50 
Now we will assign the second object to the first.
First object's data is 20.50 20.50 20.50 20.50 20.50 
Second object's data is 20.50 20.50 20.50 20.50 20.50 Program ended with exit code: 0

Tips

  • C++的輸出格式設置問題?

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ``` // // main.cpp // STL中的函數對象 // // Created by mac on 2019/5/2. // Copyright © 2019年 mac. All rights reserved. // 1.是否支持模版繼承? // 2.模版中存在多個參數? includ ...
  • 前言 - context 源碼 可以先瞭解官方 context.go 輪廓. 這裡捎帶保存一份當前 context 版本備份. golang 標準庫 1.7 版本引入 context 包, 用於 golang 函數鏈安全的管理和控制. 說真 golang context 實現非常漂亮, 代碼中說明也 ...
  • 有了模板方法,你就可以像專家一樣復用代碼,同時保持對演算法的控制 ...
  • 前言 先說一下IP協議和TCP協議,IP協議是無連接的通信協議,IP不會占用兩個設備之間通信的線路,IP實際上主要負責將每個數據包路由至目的地,但是IP協議並沒有能夠確保數據包是否到達,傳過去的數據包是否按照順序排列,所以IP數據包是不可靠的。而解決數據不可靠的問題就是由TCP協議來完成,接下來就介 ...
  • 模擬頁式虛擬存儲管理中硬體的地址轉換和用先進先出調度演算法處理缺頁中斷 ...
  • day21 01包的初識 包:把解決一類問題的模塊放在同一個文件夾裡面 包(一個包裡面通常會含有_init_.py文件(python2裡面必須有),但是後面的就沒有要求一定要有了) 同樣導入的時候有import和 from import 兩種 註意:凡是導入是帶點的,點的左邊必須是一個包模塊,對於f ...
  • 題目 "P2472 [SCOI2007]蜥蜴" 解析 這個題思路比較清晰,本(qi)來(shi)以(jiu)為(shi)無腦建圖跑最大流,結果掛了,整了一個小時後重新建圖才過的。 建立一個超級源點和一個超級匯點, 每個石柱都有其固定的通過的次數,也就是說我們要限制其通過次數,怎麼限制呢, 拆點 ,把 ...
  • 1.CPU 記憶體 硬碟 操作系統 CPU:電腦的運算和控制中心,相當於人類的大腦。 記憶體:用於暫時存放CPU中的運算數據,以及與硬碟等外部存儲器交換的數據。(暫時存儲數據,臨時載入數據及應用程式) 4G,8G,16G,32G 速度快,效率高,造價高 斷電數據丟失 硬碟:磁碟,長期存儲數據,存放文件 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...