C++語法|類直接包含與自身類型相同的成員變量?

在C++中,一個類不能直接包含與自身類型相同的成員變量。這是因為類的大小需要在編譯時確定,而一個包含自身類型的成員變量會導致遞歸定義,從而無法確定類的大小。

文章目錄

  • 示例代碼(非法定義)
  • 解決辦法
    • 1.使用指針
    • 2.使用智能指針

示例代碼(非法定義)

以下代碼是非法的,因為 Node 類包含了自身類型的成員變量 next:

class Node {
public:int value;Node next;  // 這是非法的,會導致遞歸定義
};

解決辦法

雖然不能直接包含與自身類型相同的成員變量,但可以通過指針或引用來實現類似的效果。指針和引用的大小是已知的(通常是固定的),因此可以用于定義與自身類型相關的成員變量。

1.使用指針

可以使用指針來定義一個類,其中的成員變量是指向自身類型的指針。這在實現鏈表、樹等數據結構時非常常見。

class Node {
public:int value;Node* next;  // 指向自身類型的指針Node(int val) : value(val), next(nullptr) {}
};int main() {Node node1(1);Node node2(2);node1.next = &node2;  // node1 的 next 指向 node2return 0;
}

2.使用智能指針

為了更好地管理動態分配的內存,可以使用智能指針(如 std::shared_ptrstd::unique_ptr)。

#include <memory>class Node {
public:int value;std::shared_ptr<Node> next;  // 使用智能指針Node(int val) : value(val), next(nullptr) {}
};int main() {auto node1 = std::make_shared<Node>(1);auto node2 = std::make_shared<Node>(2);node1->next = node2;  // node1 的 next 指向 node2return 0;
}

總結:

  • 直接包含自身類型的成員變量會導致遞歸定義,無法確定類的大小,因此這是非法的。
  • 可以使用指針或智能指針來定義與自身類型相關的成員變量,從而實現類似的效果。
  • 指針和智能指針的大小是已知的(通常是固定的),因此可以用于定義類的成員變量。

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

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

相關文章

k8s 二進制安裝 優化架構之 部署負載均衡,加入master02

目錄 一 實驗環境 二 部署 CoreDNS 1&#xff0c;所有node加載coredns.tar 鏡像 2&#xff0c;在 master01 節點部署 CoreDNS 3&#xff0c; DNS 解析測試 4&#xff0c; 報錯分析 5&#xff0c;重新 DNS 解析測試 三 master02 節點部署 1&#xff0…

AI學習指南數學工具篇-PCA的應用場景

AI學習指南數學工具篇-PCA的應用場景 在人工智能領域&#xff0c;數據處理是非常重要的一環。對于大量高維數據&#xff0c;我們往往需要進行數據降維來減少計算復雜度&#xff0c;同時利用可視化工具對數據進行分析和理解。主成分分析&#xff08;Principal Component Analys…

C++ 利用標準庫多字節轉寬字節字符

在 C/C 之中&#xff0c;通常建議使用&#xff1a;mbstowcs &#xff08;C語言函數庫&#xff09;來實現多字節字符轉寬字節字符&#xff0c;這是因為如果使用。 std::wstring_convert<std::codecvt_utf8<wchar_t>> 模板來實現&#xff0c;它可能導致程序崩潰的風險…

【利用數組處理批量數據-譚浩強配套】(適合專升本、考研)

無償分享學習資料&#xff0c;需要的小伙伴評論區或私信dd。。。 無償分享學習資料&#xff0c;需要的小伙伴評論區或私信dd。。。 無償分享學習資料&#xff0c;需要的小伙伴評論區或私信dd。。。 完整資料如下&#xff1a;純干貨、純干貨、純干貨&#xff01;&#xff01;…

點云成圖原理

點成圖&#xff08;Point Cloud&#xff09;是指由一組離散的點構成的圖形&#xff0c;它們在空間中沒有任何連接關系。點成圖通常是由激光雷達、相機或其他傳感器獲取的三維數據&#xff0c;用于表示現實世界中的物體或場景。 三角成圖&#xff08;Triangulation&#xff09;…

element ui Tree樹形控件

lazy 是否懶加載子節點&#xff0c;需與 load 方法結合使用 boolean 默認為falseload 加載子樹數據的方法&#xff0c;僅當 lazy 屬性為true 時生效 function(node, resolve)使用懶加載load不需要再使用data&#xff0c;利用resolve返回值即可注意&#xff1a;第一層的數據要寫…

PMR-440N7Q韓國施耐德三和相序繼電器EOCR-PMR

韓國施耐德三和EOCR繼電器PMR-440N7Q PMR-440-N 直流電動機保護器:DCL、DOCR-S/H 欠電流繼電器:EUCR-3C 交流電壓繼電器:EOVR、EVR-PD、EVR-FD、EUVR 韓國三和EOCR電動機保護器:EOCR-SS、EOCR-SS1/SS2、EOCR-AR、EOCR-ST、EOCR-SP、EOCR-SP1/SP2、EOCR-SE、EOCR-SE2/SE PMR-44…

GIT基礎02 多機器協作等命令

前言 首先我們知道git給我們提供了分支管理的功能 我們一般使用master分支作為線上環境,master分支一般是一個穩定的分支 我們通常是會創建一個其他分支進行開發,這樣不會影響線上的機器運行 如果沒有git提供這樣的分支功能,就無法做到這一套了 指令學習 假設軟件出現問題咋辦…

LBSS138LT1G 絲印J1 SOT-23 N溝道 50V/200mA 貼片MOSFET

LBSS138LT1G的應用領域廣泛&#xff0c;主要因為它是一種N溝道金屬氧化物半導體場效應晶體管&#xff08;MOSFET&#xff09;&#xff0c;具有低電荷、快速開關速度和高阻斷特性。以下是一些典型的應用領域&#xff1a; 1. 消費電子產品&#xff1a;LBSS138LT1G常用于電視、音響…

debian apt 更改阿里源

1. 備份文件 cp /etc/apt/sources.list /etc/apt/sources.list.bak 2. 更改 sources.list文件內容為&#xff1a; deb http://mirrors.aliyun.com/debian/ buster main non-free contrib deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib deb htt…

QT狀態機1-三態循環狀態機

#include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)

【C -> Cpp】由C邁向Cpp (6):靜態、友元和內部類

標題&#xff1a;【C -&#xff1e; Cpp】由C邁向Cpp &#xff08;6&#xff09;&#xff1a;靜態、友元和內部類 水墨不寫bug &#xff08;圖片來源于網絡&#xff09; 目錄 &#xff08;一&#xff09;靜態成員 &#xff08;二&#xff09;友元 &#xff08;三&#xff09…

生產性服務業與生活性服務業如何區分

服務業的興旺發達是現代經濟的顯著特征&#xff0c;是經濟社會發展的必然趨勢&#xff0c;是衡量經濟發展現代化、國際化、高端化的重要標志。生產性服務業和生活性服務業是服務業的重要組成部分&#xff0c;是當前中國經濟最具活力的產業&#xff0c;也是未來經濟發展最具潛力…

2024OD機試卷-解密犯罪時間 (java\python\c++)

題目:解密犯罪時間 題目描述 警察在偵破一個案件時,得到了線人給出的可能犯罪時間,形如 “HH:MM” 表示的時刻。 根據警察和線人的約定,為了隱蔽,該時間是修改過的,解密規則為:利用當前出現過的數字,構造下一個距離 當前時間 最近的時刻,則該時間為可能的犯罪時間。…

為pytorch前向和反向的Tensor生成描述性統計

為pytorch前向和反向的Tensor生成描述性統計 代碼 在調試Megatron-DeepSpeed的精度時&#xff0c;我們希望對比每一層前向和反向傳播的輸入輸出誤差。然而&#xff0c;由于數據量過大&#xff0c;直接保存所有數據不太現實。因此&#xff0c;我們生成了輸入輸出tensor的描述性統…

有哪些好用的3dMax大神插件?

有哪些好用的3dMax大神插件&#xff1f; Mesh Insert 3DMAX網格插入插件Mesh Insert&#xff0c;在選擇的面上安門窗、打螺絲、挖洞、插入眼耳口鼻及其它網格模型等可以分分鐘搞定&#xff01;它通過將面選擇替換為庫中的資源來加快建模過程。非常適合硬網格和有機建模&#xf…

Go 一個類型轉換工具包strconv包

Go 語言的 strconv 包提供了用于基本數據類型之間轉換的函數&#xff0c;包括字符串到其他基本類型的轉換&#xff0c;以及其他基本類型到字符串的轉換。 字符串轉換為基本數據類型 strconv.Atoi&#xff1a;將字符串轉換為 intstrconv.ParseBool&#xff1a;將字符串轉換為 b…

iOS ------ 多線程基礎

一&#xff0c;進程和線程 1&#xff0c;進程 定義&#xff1a; 進程是指在系統中正在運行的一個應用程序每個進程之間是獨立的&#xff0c;每個進程均運行在其專有的且受保護的內存進程是系統進行資源分配和調度的一個獨立單位 補充&#xff1a;iOS系統是相對封閉的系統&a…

SQL中的LAG函數與LEAD函數用法

LAG&#xff1a;函數用于獲取結果集中當前行之前的某一行的值 LAG (scalar_expression [,offset] [,default]) OVER ([partition_by_clause ] order_by_clause ) -----漢字解釋 LAG (字段 [,偏移量默認為1] [,如果沒有值時候默認值]) OVER ( [ partition_by 字段 ] order_by 字…

服務網格 SolarMesh v1.13 重磅發布

SolarMesh是行云創新推出的流量治理平臺&#xff0c;它基于Istio&#xff0c;為部署在K8s集群上的應用提供全面的流量治理能力。 在之前的版本中&#xff0c;SolarMesh提供的能力有&#xff1a;流量視圖&#xff0c;流量控制策略批量配置&#xff0c;API級別的流量數據采集和展…