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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

c与c++中struct区别

發布時間:2025/3/21 c/c++ 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c与c++中struct区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這里有兩種情況下的區別。
(1)C的struct與C++的class的區別
(2)C++中的struct和class的區別
? ? ? 在第一種情況下,struct與class有著非常明顯的區別。C是一種過程化的語言,struct只是作為一種復雜數據類型定義,struct中只能定義成員變量,不能定義成員函數(在純粹的C語言中,struct不能定義成員函數,只能定義變量。例如下面的C代碼片斷:
? ?? ???struct Point
? ?? ???{
? ?? ?? ?? ?? ? int x; // 合法
? ?? ?? ?? ?? ? int y; // 合法
? ?? ?? ?? ?? ??void print()
? ?? ?? ?? ?? ? {
? ?? ?? ?? ?? ?? ?? ?? ?printf("Point print\n"); //編譯錯誤
? ?? ?? ?? ?? ? };
}9? ?? ???;

? ? ? ? 這里第7行會出現編譯錯誤,提示如下的錯誤消息:“函數不能作為Point結構體的成員”。因此大家看到在第一種情況下struct只是一種數據類型,不能使用面向對象編程。

現在來看第二種情況。首先請看下面的代碼:

? ?? ???#include <iostream>
? ?? ???using namespace std;
? ?? ???class CPoint
? ?? ???{
? ?? ?? ?? ?? ? int x;? ?? ?? ?? ?? ?? ?//默認為private
? ?? ?? ?? ?? ? int y;? ?? ?? ?? ?? ?? ?//默認為private
? ?? ?? ?? ?? ? void print()? ?? ?? ?? ? //默認為private
? ?? ?? ?? ?? ? {
? ?? ?? ?? ?? ?? ?? ?? ?cout << "CPoint: (" << x << ", " << y << ")" << endl;
? ?? ?? ?? ?? ? }
? ?? ???public:
? ?? ?? ?? ?? ? CPoint(int x, int y)? ?? ?//構造函數,指定為public
? ?? ?? ?? ?? ? {
? ?? ?? ?? ?? ?? ?? ?? ?this->x = x;
? ?? ?? ?? ?? ?? ?? ?? ?this->y = y;
? ?? ?? ?? ?? ? }
? ?? ?? ?? ?? ? void print1() //public
? ?? ?? ?? ?? ? {
? ?? ?? ?? ?? ?? ?? ?? ?cout << "CPoint: (" << x << ", " << y << ")" << endl;
? ?? ?? ?? ?? ? }
? ?? ???};
? ?? ???
? ?? ???struct SPoint
? ?? ???{
? ?? ?? ?? ?? ? int x;? ?? ?? ?? ???//默認為public
? ?? ?? ?? ?? ? int y;? ?? ?? ?? ???//默認為public
? ?? ?? ?? ?? ? void print()? ?? ?? ?//默認為public
? ?? ?? ?? ?? ? {
? ?? ?? ?? ?? ?? ?? ?? ?cout << "SPoint: (" << x << ", " << y << ")" << endl;
? ?? ?? ?? ?? ? }
? ?? ?? ?? ?? ? SPoint(int x, int y)??//構造函數,默認為public
? ?? ?? ?? ?? ? {
? ?? ?? ?? ?? ?? ?? ?? ?this->x = x;
? ?? ?? ?? ?? ?? ?? ?? ?this->y = y;
? ?? ?? ?? ?? ? }
? ?? ???private:
? ?? ?? ?? ?? ? void print1()? ?? ?//private類型的成員函數
? ?? ?? ?? ?? ? {
? ?? ?? ?? ?? ?? ?? ?? ?cout << "SPoint: (" << x << ", " << y << ")" << endl;
? ?? ?? ?? ?? ? }
? ?? ???};
? ?? ???
? ?? ???int main(void)
? ?? ???{
? ?? ?? ?? ?? ? CPoint cpt(1, 2);??//調用CPoint帶參數的構造函數
? ?? ?? ?? ?? ? SPoint spt(3, 4);??//調用SPoint帶參數的構造函數
? ?? ?? ?? ?? ??
? ?? ?? ?? ?? ? cout << cpt.x << " " << cpt.y << endl;??//編譯錯誤
? ?? ?? ?? ?? ? cpt.print();? ?? ? //編譯錯誤
? ?? ?? ?? ?? ? cpt.print1();? ?? ?//合法
? ?? ???
? ?? ?? ?? ?? ? spt.print();? ?? ?//合法
? ?? ?? ?? ?? ? spt.print1();? ???//編譯錯誤
? ?? ?? ?? ?? ? cout << spt.x << " " << spt.y << endl;??//合法
? ?? ???
? ?? ?? ?? ?? ? return 0;
? ?? ???}
? ? ?在上面的程序里,struct還有構造函數和成員函數,其實它還擁有class的其他特性,例如繼承、虛函數等。因此C++中的struct擴充了C的struct功能。那它們有什么不同呢?
? ? ? ?main函數內的編譯錯誤全部是因為訪問private成員而產生的。因此我們可以看到class中默認的成員訪問權限是private的,而struct中則是public的。在類的繼承方式上,struct和class又有什么區別?請看下面的程序:
? ?? ???#include <iostream>
? ?? ???using namespace std;
? ?? ???class CBase
? ?? ???{
? ?? ???public:
? ?? ?? ?? ?? ? void print()? ?? ?? ?? ?? ? //public成員函數
? ?? ?? ?? ?? ? {
? ?? ?? ?? ?? ?? ?? ?? ?cout << "CBase: print()..." << endl;
? ?? ?? ?? ?? ? }
? ?? ???};
? ?? ???class CDerived1 : CBase? ?? ???//默認private繼承
? ?? ???{
? ?? ???};
? ?? ???
? ?? ???class CDerived2 : public Cbase? ?//指定public繼承
? ?? ???{
? ?? ???};
? ?? ???
? ?? ???struct SDerived1 : Cbase? ?? ???//默認public繼承
? ?? ???{
? ?? ???};
? ?? ???
? ?? ???struct SDerived2 : private Cbase??//指定public繼承
? ?? ???{
? ?? ???};
? ?? ???
? ?? ???int main()
? ?? ???{
? ?? ?? ?? ?? ? CDerived1 cd1;
? ?? ?? ?? ?? ? CDerived2 cd2;
? ?? ?? ?? ?? ? SDerived1 sd1;
? ?? ?? ?? ?? ? SDerived2 sd2;
? ?? ???
? ?? ?? ?? ?? ? cd1.print();? ? //編譯錯誤
? ?? ?? ?? ?? ? cd2.print();
? ?? ?? ?? ?? ? sd1.print();
? ?? ?? ?? ?? ? sd2.print();? ? //編譯錯誤
? ?? ???
? ?? ?? ?? ?? ? return 0;
? ?? ???}
? ? ? ?可以看到,以private方式繼承父類的子類對象不能訪問父類的public成員。class繼承默認是private繼承,而struct繼承默認是public繼承。另外,在C++模板中,類型參數前面可以使用class或typename,如果使用struct,則含義不同,struct后面跟的是“non-type template parameter”,而class或typename后面跟的是類型參數。
事實上,C++中保留struct的關鍵字是為了使C++編譯器能夠兼容C開發的程序。
答案:
分以下所示兩種情況。
C的struct與C++的class的區別:struct只是作為一種復雜數據類型定義,不能用于面向對象編程。

C++中的struct和class的區別:對于成員訪問權限以及繼承方式,class中默認的是private的,而struct中則是public的。class還可以用于表示模板類型,struct則不行。

總結

以上是生活随笔為你收集整理的c与c++中struct区别的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产婷婷精品 | 国产精品综合久久久久久 | 久久久在线| 欧美一级电影在线 | 亚洲无av在线中文字幕 | 男人天堂网在线 | 黄网站在线观 | 久久久久久精 | 亚洲国产精品成人午夜在线观看 | 日韩有码专区 | 中国精品一区二区 | 99爱视频| 国产欧美精品一区二区色综合朱莉 | 在线观看你懂的视频 | 偷偷在线观看免费高清av | 亚洲aⅴ在线观看 | 久久精品视频免费 | 91成人精品视频 | 欧美三级黄 | 日本欧美国产在线 | 高清黄色一级片 | 成人h动漫精品一区二区无码 | 91在线无精精品白丝 | 波多野结衣在线看 | 亚洲色图偷拍视频 | 日韩三级在线 | 亚洲精品乱码久久久久久蜜桃91 | 欧美中文字幕在线视频 | 久操热线| 国产精品美女久久久久图片 | 婷婷色激情 | 香蕉视频黄在线观看 | 善良的公与媳hd中文字 | 在线免费91 | 香蕉国产999 | 欧美一级片一区 | 久久精品国产亚洲AV黑人 | 国产午夜在线播放 | 亚洲第一av网站 | 日本一区不卡在线 | 日韩一区二区在线播放 | 三级不卡视频 | 99国产精品欲 | 热99这里只有精品 | av影院在线观看 | 久久中文娱乐网 | 日韩视频在线观看二区 | 人人射人人爽 | 午夜在线观看免费视频 | 午夜精品999 | 99资源 | 在线播放精品 | 深夜视频一区二区三区 | 国产免费资源 | 制服丝袜在线一区 | 亚洲一区免费视频 | 中文字幕一级二级三级 | 人妻少妇精品一区二区三区 | 91性生活| 伊人春色在线观看 | 黄在线观看 | 女人夜夜春 | 国产精品日韩精品欧美精品 | 色丁香久久 | 久草视频2 | 麻豆回家视频区一区二 | www.伊人.com | 免费激情av| 你懂的网址在线观看 | 男ji大巴进入女人的视频 | 日本视频一区二区三区 | 一级黄色大片网站 | 欧美交换国产一区内射 | 伊人丁香| 伊人色图 | 亚洲成人生活片 | 大学生av| jizz日韩 | 国产欧美一区二区三区四区 | 精品一区二区三区无码视频 | 在线免费观看视频你懂的 | 人人超碰97 | 九九久久免费视频 | 黄色在线观看av | 亚洲视频免费在线播放 | 久久久久久久影视 | 国产一区二区三区在线 | 日本中文字幕在线免费观看 | 四虎黄网 | 女性向av免费网站 | 羞羞涩涩视频 | 红杏出墙记 | 怡红院亚洲 | 日韩中文字幕免费视频 | 国产在线播放一区二区三区 | 欧美资源站 | 亚洲自拍偷拍精品视频 | 色涩色 | 8x8ⅹ国产精品一区二区二区 |