【C++語法】類和對象(2)

4.類和對象(2)

文章目錄

  • 4.類和對象(2)
    • 類的六個默認成員函數
      • (1)構造函數:
        • 構造函數特點
        • 含有缺省參數的構造函數
        • 構造函數特點(續)
        • 注意事項
        • 構造函數補充

前面總結了有關對象概念,對比 C 與 C++ 編程范式;講解類定義、訪問限定、作用域、實例化;說明類存儲大小含內存對齊,即便無成員變量也占 1 字節;還闡述 this 指針特性,它是成員函數隱式形參。忘記了就回去看

類和對象(1)

類的六個默認成員函數

空類并不是什么都沒有,在用戶沒有顯式實現的情況下,編譯器會默認生成六個成員函數。

在這里插入圖片描述

(1)構造函數:

構造函數的函數名與類名相同,在實例化類類型對象時自動調用,并且在對象的生命周期內只調用一次,構造函數的主要作用是初始化對象,而不是創建對象

構造函數特點

1.構造函數的函數名與類名相同
2.沒有返回值,不寫void
3.構造函數在對象實例化后自動調用
4.支持函數重載(函數重載的規則與之前學的內容一致)可以使用缺省參數

在這里插入圖片描述

特別要注意:構造函數雖然是在對象實例化時編譯器自動調用該函數。但不可以把構造函數放在private或protect中

在這里插入圖片描述

含有缺省參數的構造函數

在這種情況下我們可以在對象實例化時進行傳參,注意:這里是傳參,并不是將對象進行初始化,要與結構體初始化區分開來,這里傳參使用小括號”()”不是用”{ }”

在這里插入圖片描述

構造函數特點(續)
  1. 如果用戶沒有顯式定義構造函數,C++編譯器會自動生成一個無參的構造函數,但如果用戶生成了編譯器不再會自動生成

  2. 對于編譯器自動生成的構造函數,有如下的作用:
    1>該構造函數不會對編譯器內置類型對象(int,float,double,char…)進行處理

    2>該構造函數會對自定義類型調用它的默認構造函數注意默認構造函數與其他的構造函數在使用上有很大的區別,在后面會詳細說),如果該自定義類型沒有默認的構造函數,編譯器會報錯

注意事項
  • 如果該自定義類型的構造函數為全缺省參數,編譯器不會報錯,當構造函數的參數中存在非缺省參數時,編譯器會報錯

  • 無參的構造函數和全缺省的構造函數都稱為默認構造函數,并且一個類中默認構造函數只能有一個。

  • 無參構造函數、全缺省構造函數,我們沒寫編譯器默認生成的構造函數,都可以認為是默認構造函數

在這里插入圖片描述

構造函數補充
  1. 一個類中默認構造函數只能有一個
  2. 一定要注意默認構造函數與普通構造函數的區別
  3. 實踐中的總結
    • 1>一般情況下,構造函數都需要我們自己去定義。
    • 2>當一個類中沒有內置類型成員變量,只有自定義類型變量時,我們可以對這個類不寫構造函數,它會逐層調用其他自定義類型成員變量的構造函數

Q:關于編譯器生成的默認成員函數,很多人會有疑惑:不實現構造函數的情況下,編譯器會生成默認的構造函數。但是看起來默認構造函數又沒什么用?對象調用了編譯器生成的默認構造函數,但是d對象_year/_month/_day,依l日是隨機值。也就說在這里編譯器生成的默認構造函數并沒有什么用??

A:C++把類型分成內置類型(基本類型)和自定義類型。內置類型就是語言提供的數據類型,如:int/char…,自定義類型就是我們使用class/struct/union等自己定義的類型,看看下面的程序,就會發現編譯器生成默認的構造函數會對自定類型成員_t調用的它的默認成員函數。

注意:

  1. C++11中針對內置類型成員不初始化的缺陷,又打了補丁,即:內置類型成員變量在類中聲明時可以給默認值。
  2. 當我們自己寫了構造函數(無論是否為默認的構造函數),編譯器就不會自動生成默認的構造函數了要么自己補充,要么使用關鍵字default強制編譯器自動生成
  3. 在定義類中成員變量是進行變量聲明并給出缺省值,而不是進行實例化后進行初始化,看起來非常像,但要注意區分。這里是給聲明一個默認值(缺省值),當有其他值時不會使用該缺省值,包括構造函數

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/77349.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77349.shtml
英文地址,請注明出處:http://en.pswp.cn/web/77349.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【自然語言處理與大模型】vLLM部署本地大模型②

舉例上一篇文章已經過去了幾個月,大模型領域風云變幻,之前的vLLM安裝稍有過時,這里補充一個快速安裝教程: # 第一步:創建虛擬環境并激活進入 conda create -n vllm-0.8.4 python3.10 -y conda activate vllm-0…

26 Arcgis軟件常用工具有哪些

一、畫圖改圖工具(矢量編輯)? ?挪位置工具(移動工具)? 干哈的??選中要素?(比如地塊、道路)直接拖到新位置,或者用坐標?X/Y偏移?批量移動,適合“整體搬家”。 ?磁…

QNX/LINUX/Android系統動態配置動態庫.so文件日志打印級別的方法

背景 通常我們會在量產的產品上,配置軟件僅打印少量日志,以提升產品的運行性能。同時我們要考慮預留方法讓軟件能夠擁有能力可以在燒錄版本后能夠通過修改默寫配置,打印更多日志。因為量產后的軟件通常開啟熔斷與加密,不能夠輕松…

WebGL圖形編程實戰【4】:光影交織 × 逐片元光照與渲染技巧

現實世界中的物體被光線照射時,會反射一部分光。只有當反射光線進人你的眼睛時,你才能夠看到物體并辯認出它的顏色。 光源類型 平行光(Directional Light):光線是相互平行的,平行光具有方向。平行光可以看…

【Hive入門】Hive基礎操作與SQL語法:DDL操作全面指南

目錄 1 Hive DDL操作概述 2 數據庫操作全流程 2.1 創建數據庫 2.2 查看數據庫 2.3 使用數據庫 2.4 修改數據庫 2.5 刪除數據庫 3 表操作全流程 3.1 創建表 3.2 查看表信息 3.3 修改表 3.4 刪除表 4 分區與分桶操作 4.1 分區操作流程 4.2 分桶操作 5 最佳實踐與…

YOLO數據處理

YOLO(You Only Look Once)的數據處理流程是為了解決目標檢測領域的核心挑戰,核心目標是為模型訓練和推理提供高效、規范化的數據輸入。其設計方法系統性地解決了以下關鍵問題,并對應發展了成熟的技術方案: 一、解決的問…

Ubuntu-Linux中vi / vim編輯文件,保存并退出

1.打開文件 vi / vim 文件名(例: vim word.txt )。 若權限不夠,則在前方添加 sudo (例:sudo vim word.txt )來增加權限; 2.進入文件,按 i 鍵進入編輯模式。 3.編輯結…

PCL繪制點云+法線

讀取的點云ASCII碼文件&#xff0c;每行6個數據&#xff0c;3維坐標3維法向 #include <iostream> #include <fstream> #include <vector> #include <string> #include <pcl/point_types.h> #include <pcl/point_cloud.h> #include <pc…

如何在學習通快速輸入答案(網頁版),其他學習平臺通用,手機上快速粘貼

目錄 1、網頁版&#xff08;全平臺通用&#xff09; 2、手機版&#xff08;學習通&#xff0c;其他平臺有可能使用&#xff09; 1、網頁版&#xff08;全平臺通用&#xff09; 1、首先CtrlC復制好答案 2、在學習通的作業里輸入1 3、對準1&#xff0c;然后鼠標右鍵 &#xff…

002 六自由度舵機機械臂——姿態解算理論

00 DH模型的核心概念 【全程干貨【六軸機械臂正逆解計算及仿真示例】】 如何實現機械臂的逆解計算-機器譜-robotway DH模型是機器人運動學建模的基礎方法&#xff0c;通過??四個參數??描述相鄰關節坐標系之間的變換關系。其核心思想是將復雜的空間位姿轉換分解為繞軸旋轉…

pymongo功能整理與基礎操作類

以下是 Python 與 PyMongo 的完整功能整理&#xff0c;涵蓋基礎操作、高級功能、性能優化及常見應用場景&#xff1a; 1. 安裝與連接 (1) 安裝 PyMongo pip install pymongo(2) 連接 MongoDB from pymongo import MongoClient# 基礎連接&#xff08;默認本地&#xff0c;端口…

Trae+DeepSeek學習Python開發MVC框架程序筆記(四):使用sqlite存儲查詢并驗證用戶名和密碼

繼續通過Trae向DeepSeek發問并修改程序&#xff0c;實現程序運行時生成數據庫&#xff0c;用戶在系統登錄頁面輸入用戶名和密碼后&#xff0c;控制器通過模型查詢用戶數據庫表來驗證用戶名和密碼&#xff0c;驗證通過后顯示登錄成功頁面&#xff0c;驗證失敗則顯示登錄失敗頁面…

如何識別金融欺詐行為并進行分析預警

金融行業以其高效便捷的服務深刻改變了人們的生活方式。然而,伴隨技術進步而來的,是金融欺詐行為的日益猖獗。從信用卡盜刷到復雜的龐氏騙局,再到網絡釣魚和洗錢活動,金融欺詐的形式層出不窮,其規模和影響也在不斷擴大。根據全球反欺詐組織(ACFE)的最新報告,僅2022年,…

紛析云:開源財務管理軟件的創新與價值

在企業數字化轉型中&#xff0c;紛析云作為一款優秀的開源財務管理軟件&#xff0c;正為企業財務管理帶來新變革&#xff0c;以下是其核心要點。 一、產品概述與技術架構 紛析云采用微服務架構&#xff0c;功能組件高內聚低耦合&#xff0c;可靈活擴展和定制。前端基于現代框…

蛋白質大語言模型ESM介紹

ESM(Evolutionary Scale Modeling)是 Meta AI Research 團隊開發的一系列用于蛋白質的預訓練語言模型。這些模型在蛋白質結構預測、功能預測和蛋白質設計等領域展現出了強大的能力。以下是對 ESM 的詳細介紹: 核心特點 大規模預訓練:基于大規模蛋白質序列數據進行無監督學…

OpenCv高階(七)——圖像拼接

目錄 一、圖像拼接的原理過程 1. 特征檢測與描述&#xff08;Feature Detection & Description&#xff09; 2. 特征匹配&#xff08;Feature Matching&#xff09; 3. 圖像配準&#xff08;Image Registration&#xff09; 4. 圖像變換與投影&#xff08;Warping&…

Native層Trace監控性能

一、基礎實現方法 1.1 頭文件引用 #include <utils/Trace.h> // 基礎版本 #include <cutils/trace.h> // 兼容舊版本1.2 核心宏定義 // 區間追蹤&#xff08;推薦&#xff09; ATRACE_BEGIN("TraceTag"); ...被監控代碼... ATRACE_END();// 函數級自…

金融行業微服務架構設計與挑戰 - Java架構師面試實戰

金融行業微服務架構設計與挑戰 - Java架構師面試實戰 本文通過模擬一位擁有十年Java研發經驗的資深架構師馬架構與面試官之間的對話&#xff0c;深入探討了金融行業項目在微服務架構下的技術挑戰與解決方案。 第一輪提問 面試官&#xff1a; 馬架構&#xff0c;請介紹一下您…

服務器虛擬化:技術解析與實踐指南

在信息技術飛速發展的今天,企業對服務器資源的需求日益增長,傳統物理服務器存在資源利用率低、部署周期長、管理成本高等問題。服務器虛擬化技術應運而生,它通過將物理服務器的計算、存儲、網絡等資源進行抽象和整合,劃分成多個相互隔離的虛擬服務器,從而提高資源利用率、…

OpenCV 圖形API(54)顏色空間轉換-----將圖像從 RGB 色彩空間轉換到 HSV色彩空間RGB2HSV()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 將圖像從 RGB 色彩空間轉換為 HSV。該函數將輸入圖像從 RGB 色彩空間轉換到 HSV。R、G 和 B 通道值的常規范圍是 0 到 255。 輸出圖像必須是 8 位…