亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++中關鍵字Struct和Class的區別

2020-01-26 15:17:13
字體:
來源:轉載
供稿:網友

Struct和Class的區別

今天這篇博文主要講解在C++中關鍵字struct和class的區別。這篇博文,將會系統的將這兩個關鍵字的不同面進行詳細的講解。

從語法上來講,class和struct做類型定義時只有兩點區別:

1.默認繼承權限,如果不指定,來自class的繼承按照private繼承處理,來自struct的繼承按照public繼承處理;

2.成員的默認訪問權限。class的成員默認是private權限,struct默認是public權限。以上兩點也是struct和class最基本的差別,也是最本質的差別;

但是在C++中,struct進行了擴展,現在它已經不僅僅是一個包含不同數據類型的數據結構了,它包括了更多的功能。

Struct能包含成員函數嗎?

是的,答案是肯定的?,F在就讓我寫一段代碼驗證一下:

復制代碼 代碼如下:

/*
** FileName     : StructAndClassDiffDemo
** Author       : Jelly Young
** Date         : 2013/12/7
** Description  : More information, please go to //www.49028c.com
*/
 
#include <iostream>
using namespace std;
 
struct Test
{
    int a;
    int getA()
    {
        return a;
    }
 
    void setA(int temp)
    {
        a = temp;
    }
};
 
int main(int argc, char* argv[])
{
    Test testStruct;
    testStruct.setA(10);
    cout<<"Get the value from struct:"<<testStruct.getA()<<endl;
 
    Test *testStructPointer = new Test;
    testStructPointer->setA(20);
    cout<<"Get the value from struct again:"<<testStructPointer->getA()<<endl;
    delete testStructPointer;
 
    return 0;
}

以上的代碼會很正確的運行,是的;沒錯,struct能包含成員函數的。

Struct有自己的構造函數嗎?

是的,可以的。看以下測試代碼:

復制代碼 代碼如下:

/*
** FileName     : StructAndClassDiffDemo
** Author       : Jelly Young
** Date         : 2013/12/7
** Description  : More information, please go to //www.49028c.com
*/
 
#include <iostream>
using namespace std;
 
struct Test
{
    int a;
 
    Test()
    {
        a = 100;
    }
 
    int getA()
    {
        return a;
    }
 
    void setA(int temp)
    {
        a = temp;
    }
};
 
int main(int argc, char* argv[])
{
    Test testStruct;
    testStruct.setA(10);
    cout<<"Get the value from struct:"<<testStruct.getA()<<endl;    
        Test *testStructPointer = new Test;
    testStructPointer->setA(20);
    cout<<"Get the value from struct again:"<<testStruct.getA()<<endl;
    delete testStructPointer;
 
    // test the constructor
    Test testConstructor;
    cout<<"Set the value by the construct and get it:"<<testConstructor.getA()<<endl;
 
    return 0;
}

Struct可以有析構函數么?

讓我來驗證一下:

復制代碼 代碼如下:

/*
** FileName     : StructAndClassDiffDemo
** Author       : Jelly Young
** Date         : 2013/12/7
** Description  : More information, please go to //www.49028c.com
*/
 
#include <iostream>
using namespace std;
 
struct Test
{
    int a;
 
    Test()
    {
        a = 100;
    }
 
    int getA()
    {
        return a;
    }
 
    void setA(int temp)
    {
        a = temp;
    }
 
    ~Test()
    {
        cout<<"Destructor function called."<<endl;
    }
};
 
int main(int argc, char* argv[])
{
    Test testStruct;
    testStruct.setA(10);
    cout<<"Get the value from struct:"<<testStruct.getA()<<endl;    
        Test *testStructPointer = new Test;    
        testStructPointer->setA(20);
    cout<<"Get the value from struct again:"<<testStruct.getA()<<endl;
    delete testStructPointer;
 
    // test the constructor
    Test testConstructor;
    cout<<"Set the value by the construct and get it:"<<testConstructor.getA()<<endl;
 
    return 0;
}

是的,完全支持析構函數。

Struct支持繼承么?

再讓我寫代碼驗證一下:

復制代碼 代碼如下:

/*
** FileName     : StructAndClassDiffDemo
** Author       : Jelly Young
** Date         : 2013/12/7
** Description  : More information, please go to //www.49028c.com
*/
 
#include <iostream>
using namespace std;
 
struct A
{
    int a;
    A()
    {
        a = 10;
    }
    void print()
    {
        cout<<"I am from A"<<endl;
    }
};
 
struct B : A
{
    int b;
    B()
    {
        a = 30; // set a to 30
        b = 20;
    }
    /*void print()
    {
    cout<<"I am from B"<<endl;
    }*/
};
 
int main(int argc, char* argv[])
{
    B b1;
    cout<<b1.a<<endl;
    cout<<b1.b<<endl;
    b1.print();
 
    A a1;
    cout<<a1.a<<endl;
    a1.print();
 
    return 0;
}

運行上述代碼,struct支持繼承。

Struct支持多態么?

寫代碼測試一下便知:

復制代碼 代碼如下:

/*
** FileName     : StructAndClassDiffDemo
** Author       : Jelly Young
** Date         : 2013/12/7
** Description  : More information, please go to //www.49028c.com
*/
 
#include <iostream>
using namespace std;
 
struct A
{
    virtual void print() = 0;
};
 
struct B : A
{
    void print()
    {
        cout<<"I am from B"<<endl;
    }
};
 
struct C : A
{
    void print()
    {
        cout<<"I am from C"<<endl;
    }
};
 
int main(int argc, char* argv[])
{    
    A *a1;    
    B *b1 = new B;    
    C *c1 = new C;    
    a1 = b1;    
    a1->print(); // call B, not A
 
    a1 = c1;
    a1->print(); // call C, not A
 
    return 0;
}

Struct支持Private、Protected和Public關鍵字么?

復制代碼 代碼如下:

/*
** FileName     : StructAndClassDiffDemo
** Author       : Jelly Young
** Date         : 2013/12/7
** Description  : More information, please go to //www.49028c.com
*/
 
#include <iostream>
using namespace std;
 
struct A
{
private:
    int b;
 
protected:
    int c;
 
public:
    A()
    {
        b = 10;
        c = 20;
        d = 30;
    }
 
    int d;
};
 
struct B : A
{
    void printA_C()
    {
        cout<<A::c<<endl;
    };
 
    // private member can not see
    /*void printA_B()
    {
    cout<<A::b<<endl;
    }*/
 
    void printA_D()
    {
        cout<<A::d<<endl;
    }
};
 
int main(int argc, char* argv[])
{
 
    A a1;
    B b1;
 
    // private member can not see
    //cout<<a1.b<<endl;
 
    // protected member can not see
    //cout<<a1.c<<endl;
 
    // public member can see
    cout<<a1.d<<endl;
 
    return 0;
}

寫了這么多了,那么會出現這種一個狀況,如果是class的父類是struct關鍵字描述的,那么默認訪問屬性是什么?

當出現這種情況時,到底默認是public繼承還是private繼承,取決于子類而不是基類。class可以繼承自struct修飾的類;同時,struct也可以繼承自class修飾的類,繼承屬性如下列描述:

復制代碼 代碼如下:

class B:A{}; // private 繼承
 
class A{};
struct B:A{}; // public 繼承

最后,那么到底是使用struct,還是使用class呢?這個看個人喜好,但是這里有一個編程規范的問題,當你覺得你要做的更像是一種數據結構的話,那么用struct,如果你要做的更像是一種對象的話,那么用class。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97免费视频在线| 日韩av在线免费观看一区| 欧美午夜视频在线观看| 欧美日韩国产在线| 日韩欧美综合在线视频| 蜜月aⅴ免费一区二区三区| 成人精品久久一区二区三区| 91国产高清在线| 亚洲福利在线观看| 日韩中文字幕在线免费观看| 久久99精品久久久久久琪琪| 日韩欧美第一页| 亚洲女人天堂av| 夜夜嗨av一区二区三区免费区| 欧美精品生活片| 成人黄色大片在线免费观看| 精品国产拍在线观看| 久久人人爽人人爽人人片亚洲| 精品呦交小u女在线| 两个人的视频www国产精品| 亚洲伦理中文字幕| 久久伊人精品一区二区三区| 中文字幕欧美日韩| 欧美成人亚洲成人日韩成人| 久久亚洲成人精品| 亚洲精品一区二区三区婷婷月| 国产日韩精品视频| 欧美一区二区三区……| 91精品国产综合久久香蕉| 亚洲国产天堂久久国产91| 亚洲成人av在线| 亚洲激情视频在线观看| 免费不卡在线观看av| 亚洲欧洲在线播放| 国产欧美日韩丝袜精品一区| 青草青草久热精品视频在线网站| 这里只有精品视频| 欧美xxxx18性欧美| 精品亚洲一区二区三区在线播放| 91精品久久久久| 欧美日韩午夜视频在线观看| www.亚洲男人天堂| 欧美丝袜一区二区| 国产男女猛烈无遮挡91| 一区二区三区久久精品| 亚洲精品资源美女情侣酒店| 伊人伊人伊人久久| 日韩中文字幕不卡视频| 日韩在线欧美在线国产在线| 性金发美女69hd大尺寸| 亚洲精品欧美日韩| 91在线观看免费观看| 97香蕉久久夜色精品国产| 欧洲成人在线视频| 久久精品2019中文字幕| 亚洲欧美精品一区| 国产欧美一区二区三区在线看| 日韩中文字幕网| 精品国产自在精品国产浪潮| 欧美成人午夜视频| 国产成人精品视频在线观看| xx视频.9999.com| 4k岛国日韩精品**专区| 日韩精品视频在线观看免费| 国产黑人绿帽在线第一区| 国产精品1234| 久久久久久网站| 精品无人区乱码1区2区3区在线| 亚洲精品福利资源站| 久久久国产影院| 成人激情黄色网| 亚洲欧美国产精品va在线观看| 日韩在线视频网站| 国产精品啪视频| 久久久久久久爱| 亚洲老头同性xxxxx| 91最新在线免费观看| 精品久久香蕉国产线看观看亚洲| 91av网站在线播放| 日韩欧美国产成人| 亚洲а∨天堂久久精品9966| 欧美黄网免费在线观看| www.日韩视频| 国产色综合天天综合网| 欧美刺激性大交免费视频| 日韩久久精品成人| 中文字幕日韩精品在线观看| 亚洲一级片在线看| 在线亚洲午夜片av大片| 亚洲区一区二区| 亚洲嫩模很污视频| 宅男66日本亚洲欧美视频| 亚洲一区二区三| 国产精品视频免费在线| 精品无人区乱码1区2区3区在线| 久久成人18免费网站| 国产精品入口免费视频一| 亚洲欧美国产制服动漫| www.午夜精品| 日韩高清av在线| 91豆花精品一区| 成人免费高清完整版在线观看| 国产精品福利在线观看网址| 亚洲国产精品电影在线观看| 成人a免费视频| 欧美另类极品videosbestfree| 国产成人啪精品视频免费网| 国产精品福利网站| 韩国国内大量揄拍精品视频| 国产不卡av在线| 韩国国内大量揄拍精品视频| 久久久免费av| 亚洲va男人天堂| 国产精品久久久精品| 日韩免费电影在线观看| 国产成人+综合亚洲+天堂| 久久不射电影网| 亚洲最大福利视频| 久久在线视频在线| 91九色国产社区在线观看| 国产免费一区视频观看免费| 日韩精品一区二区视频| 欧美电影免费在线观看| 精品久久久久久久大神国产| 黄色一区二区在线| 欧美激情综合色| 国产成人高清激情视频在线观看| 97人人爽人人喊人人模波多| 亚洲男人的天堂网站| 久久天天躁狠狠躁老女人| 亚洲jizzjizz日本少妇| 久久精品美女视频网站| 亚洲最大的免费| 97超碰国产精品女人人人爽| 91国偷自产一区二区三区的观看方式| 国产精品久久久久久久7电影| 亚洲电影免费观看高清完整版在线观看| 欧美洲成人男女午夜视频| 免费av在线一区| 欧美黄色片在线观看| 久久精品一本久久99精品| 2021久久精品国产99国产精品| 91在线观看免费高清完整版在线观看| 欧美日韩另类字幕中文| 色偷偷噜噜噜亚洲男人的天堂| 一本色道久久综合狠狠躁篇的优点| 亚洲在线第一页| 久久久久久高潮国产精品视| 日本成人免费在线| 成人精品一区二区三区| 国产亚洲日本欧美韩国| 亚洲女人被黑人巨大进入| 最近的2019中文字幕免费一页| 欧美综合一区第一页| 中文字幕亚洲图片| 91精品在线国产| 97视频色精品| 性欧美xxxx视频在线观看| 91精品国产高清自在线| 国产精品旅馆在线| 欧美另类暴力丝袜| 最近日韩中文字幕中文| 91精品视频在线免费观看| 中文字幕亚洲综合久久筱田步美|