日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

[C++]试一试结构体struct node的构造函数

發布時間:2023/12/3 c/c++ 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [C++]试一试结构体struct node的构造函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

可直接點擊跳轉到構造函數處

  • 結構體概念
  • 定義結構體
    • 定義結構體及結構體變量
    • 結構體變量的特點
    • 成員調用
    • 成員函數調用
  • 結構體的構造函數
  • Upd1
  • Upd2
  • Upd3

結構體概念

在實際問題中,一組數據往往具有不同的數據類型。
例如:人口大普查時,需要記錄每一個人的姓名,年齡,性別,身份證等
這些信息分別要用整型,字符型,字符串型來記錄。
為了解決這種問題,C++語言給出了另一個構造數據類型——“結構體”,
它在數據存儲方面相當于其他高級語言的記錄,但它有這面向對象的優勢

定義結構體

定義結構體及結構體變量

有兩種形式:
1:

struct 結構體類型名  //struct是關鍵字
  成員表; //可以有多個成員
  成員函數; //可以有多個成員函數,也可以沒有
}結構體變量表; //可以同時定義多個,用“,”隔開

舉個栗子

struct node { //定義了一個名叫node的struct類型string name;int math, chinese;int total; }a[150];//定義了a數組變量

2:

struct 結構體類型名{
  成員表;
  成員函數;
};
結構體名 結構體變量名

舉個栗子:

struct node {string name;int math, chinese;int total; }; node a[150];

在定義結構體時注意,結構體變量名和結構體名不能相同。在定義結構體時,系統對其不分配實際內存,只有在定義結構體變量時,系統才為其分配內存

結構體變量的特點

(1)結構體變量可以整體操作,例如:

swap ( a[i], a[i + 1] );  //兩個結構體變量里面的所有變量都進行交換

(2)結構體變量的成員訪問也很方便清晰

cin >> a[i].name;

(3)結構體變量的初始化和數組的初始化類似

node opt = { "xiaoming", 12, 34, 1243 };

成員調用

結構體變量和各個成員之間的引用的一般形式為:

結構體變量.成員名

我們還可以這樣操作

cin >> a[i].name //一般情況下不能寫成cin>>a[i]; a[i].total = a[i].math + a[i].chinese;

實際上結構體成員的操作與該成員類型所具有的操作是一致的
成員運算符“.”在存取成員數值時使用其優先級最高,并且具有左結合性
在處理結構體包含結構體的時候,可寫作

strua.strub.memb

表示結構體變量strua有結構體成員strub;結構體變量strub有成員memb

成員函數調用

結構體成員函數調用的一般形式為:

結構體變量.成員函數

結構體成員函數默認將結構體變量作為應用參數


結構體的構造函數

這個才是我寫這篇博客的原因

#include <iostream> using namespace std;struct node {int p1, p2; //這個就是構造函數了node ( int n1, int n2 ) { //可以隨便取變量名,當然得是合法的p1 = n1;p2 = n2;} };int main() {node a = node ( 2, 3 );printf ( "%d %d", a.p1, a.p2 );return 0; }

運行結果如下,計算機自動從左到右依次匹配,把2匹配給n1,3匹配給n2

這種構造函數等同于以下多種的寫法:
1.

#include <iostream> using namespace std;struct node {int p1, p2;node ( int n1, int n2 ) :p1 ( n1 ), p2 ( n2 ) {}//構造了int類型的n1,n2,并將值賦值給了結構體里面的對應成員 };int main() {node a = node ( 2, 3 );printf ( "%d %d", a.p1, a.p2 );return 0; }
  • #include <iostream> using namespace std;struct node {int p1, p2;node ( int n1, int n2 ) {p1 = n1;p2 = n2;} };int main() {node a ( 2, 3 );printf ( "%d %d", a.p1, a.p2 );return 0; }

    但是如果寫成這樣,計算機是無法識別的

    node a;a = node ( 2, 3 );

    但是我又想讓計算機識別該怎么辦呢??
    這個時候就需要在構造函數前面再加一句

    struct node {int p1, p2;node(){}node( int n1, int n2 ) {p1 = n1, p2 = n2;} }; node a = node( 2, 3 );

    這個時候你就發現計算機正常運轉了



    當然構造函數里面可以多傳幾個,也可以選擇不用傳的參數,如:



    但是有可能大家會看到一些大犇將構造函數寫成這樣子

    可能會疑惑為什么構造函數里面的變量定義要給賦初值呢?
    可以這么想:先提前申請多個變量,后面進行構造函數傳參的時候,就算我們傳得不夠多,也能保證每個成員是有初值的,而不是隨機亂碼

    也可以這么理解,如果我們沒有給一些成員傳參賦值,那么默認成員的值就被賦值成我們定義變量的初值,如圖

    注意,因為結構體是默認從左開始匹配,所以如果少傳幾個參數,前面的n1,n2肯定是有值的,換言之,計算機會自動先把前面的滿足了,才往后推進


    這也是為什么要賦初值的原因,如果我們不賦,后面的構造函數傳參傳少了,不管后面用沒用到了那一個參數,就會被計算機報錯,認為那是一個亂碼很危險,如圖


    最后還是溫馨提示,構造函數很難搞,經常容易出問題,所以大家可以采取最原始的賦值方式,盡管我喜歡構造函數

    node a; a.p1 = 2; a.p2 = 4; a.p3 = a.p1 * a.p2;


    Upd1

    時隔許久回來看這篇寫的博客,只想由衷的感嘆一句
    構造函數一點都不難,只要不作死
    現在基本上我的結構體構造函數已經固定寫法了

    struct node {int ...;node() {}node( int ... ) {} };

    如果你是一名競賽生,不建議寫各種炫技的騷操作,like this👇

    struct node {int ...;node( int ... )...(), ...() {} }

    因為好像是不同的編譯器標準有所出入,C++11C++11C++11下似乎可以識別,但是有些就會報錯


    建議以后寫構造函數前
    都加上一句

    node(){}

    這個語句,我自身理解為向計算機發送一種信號,告訴它我將以這種形式使用構造函數
    不理解也沒關系,反正多敲幾個字符也少不了多少肉

    加上這一句后,構造函數的兩種使用
    計算機都能識別成為同一個意思語句

    struct node {int p1, p2;node(){}node( int n1, int n2 ) {p1 = n1, p2 = n2;} }; node a = node( 2, 3 ); node a = { node } ( 2, 3 );

    但如果不加,就只能使用原配

    struct node {int p1, p2;node( int n1, int n2 ) {p1 = n1, p2 = n2;} } node a = { node } ( 2, 3 );

    老實說,如果不加這一句,后面的構造函數可有可無,計算機都能識別原配寫法
    即這么寫,照樣正常運行

    struct node {int p1, p2; } node a = { node } ( 2, 3 );


    這里就多說一說這美麗的一行代碼
    其實它可以不為空

    struct node {int n1, n2;int a[10];node() {p1 = 2;memset( a, 0, sizeof( a ) );}node( int n1, int n2 ) {p1 = n1, p2 = n2;} }a;

    這段里面的內容意思就是
    一旦你申請了一個結構體aaa,計算機自動的就完成了a.p1=2a.p1=2a.p1=2的賦值以及結構體嵌套數組的清零操作,不用自己在里面手打一個clearclearclear函數就能起到同樣的效果
    經常在矩陣快速冪等各種場合的時候使用

    Upd2

    再提一句,構造函數的原配法則

    上面的寫法是

    struct node {int a, b; }; node x = { node } ( 2, 3 );

    實際上,還可以更“原配”

    struct node {int a, b; }; node x = { 2, 3 };

    對,沒錯,直接用大括號把賦的值包起來,連結構體名都不用寫了

    但是像這種計算機默認的寫法,肯定是有自己鐵一樣的規矩的

    ——一定是按順序依次賦值

    也就是說,在結構體里面定義變量的順序是,a,然后b

    那么后面賦值的順序,也一定是a=2,b=3

    就不能像自己重載構造函數那么隨意

    struct node {int a, b;node(){}node( int A, int B ) { b = A, a = B; } }; node x = node( 2, 3 );

    這里更新主要是想說,原配也有傳參數量不夠的情況

    struct node {int a, b, c, d; }; node x = { 2, 3 };

    這樣還是a=2,b=3,但是c,d就不知道咯

    Upd3

    還有在初始化/初定義一個結構體的時候,連=都不要

    node x( 2, 3 );

    但這種寫法必須建立在重載構造函數的基礎上,計算機的原配是不會認識的

    struct node {int a, b;node(){}node( int A, int B ) { a = A, b = B; } }; node x( 2, 3 )

    最后,現在官方都開c++14了,老實說,博主自己的構造函數都越寫越簡單了

    私以為,沒必要再像以前小心翼翼,但當然求穩肯定不是劣策

    總結

    以上是生活随笔為你收集整理的[C++]试一试结构体struct node的构造函数的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 在线观看日本一区 | 成人免费在线视频网站 | 善良的少妇伦理bd中字 | 国产黄色精品视频 | 日韩成人精品一区二区三区 | 99色国产 | 午夜久久剧场 | 久插视频| 成人羞羞国产免费 | 无码人妻丰满熟妇区毛片蜜桃精品 | 亚洲一卡二卡在线观看 | 日韩黄色大全 | 成人午夜视频网站 | 天天综合视频 | 快灬快灬一下爽69 | 亚洲av无码国产精品永久一区 | 在线久草 | 色av影院| 性色生活片 | 高h亲子乱h| 天天操免费视频 | 日韩激情视频在线 | 91午夜在线观看 | 97视频资源| 国产伦精品一区二区三区高清版 | 无遮挡边吃摸边吃奶边做 | 亚洲色成人一区二区三区小说 | 天天综合精品 | 国产女人18毛片水真多18 | 精品视频专区 | 免费网站在线观看黄色 | 免费在线观看视频 | 亚洲欧洲精品一区二区 | 一道本一区二区 | 黄视频网站在线看 | 免费在线观看a级片 | 欧美日韩国产精品综合 | aa亚洲| 波多野结衣之潜藏淫欲 | 欧美性生活xxx | 99久久久无码国产精品6 | 欧美成人a | 国产亚洲色婷婷久久99精品91 | 欧美gv在线观看 | 国产精品一区二区白浆 | av55 | 免费高清av在线看 | 奇米精品一区二区三区四区 | 久久成人亚洲 | av中文在线资源 | 操操操影院 | 粗大的内捧猛烈进出在线视频 | 国产经典久久久 | 欧美精品一线 | 免费毛片看片 | 18久久 | 美国黄色一级视频 | 2017天天干| 午夜国产在线视频 | 69xxx少妇按摩视频 | 少妇视频网 | 成人网免费视频 | 99精品国产免费 | 成人精品在线 | 四色最新网址 | 西欧毛片| 人妻少妇精品久久 | 小仙女av| 小视频免费在线观看 | 国产资源站 | 久久综合激情 | 亚洲在线不卡 | 亚洲人成网站999久久久综合 | 国产嫩草影院久久久久 | 国产美女黄网站 | 久久久久久久久久艹 | 亚洲午夜精品 | 国产精品免费在线播放 | 男人扒女人添高潮视频 | 欧美一级黄色片子 | 日本一区二区三区欧美 | 男女激情视频网站 | 日韩电影在线观看一区二区 | 97偷拍视频| 一区二区三区入口 | 二区久久| 看黄色一级视频 | 非洲黄色大片 | 国产精品播放 | 国产激情四射 | 九九热视频这里只有精品 | 99精品久久精品一区二区 | av资源网在线观看 | 日韩av免费 | 国产视频日韩 | 二三区视频 | 大j8黑人w巨大888a片 | 97人妻精品一区二区三区视频 | 国产手机看片 | 国产又大又粗又爽的毛片 |