[c++] C ++中的Struct構造函數?



Answers

struct TestStruct {
        int id;
        TestStruct() : id(42)
        {
        }
};
Question

C ++中可以有一個構造函數嗎?

我一直在試圖解決這個問題,但我沒有得到語法。




語法與C ++中的類相同。 如果你知道在c ++中創建構造函數,那麼它在結構中是相同的。

struct Date
{
int day;

Date(int d)
{
    day = d;
}
void printDay()
{
    cout << "day " << day << endl;
}

};

Struct可以將所有東西都作為c ++中的類。 正如前面所說的差異只是默認情況下C ++成員有私人訪問權限,但在結構中它是公開的。但根據編程的考慮使用struct關鍵字的數據專用結構。 對具有數據和函數的對象使用class關鍵字。




c ++中,structc ++類只有一個區別,默認情況下,struct成員是public和class成員是私有的。

/*Here, C++ program constructor in struct*/ 
#include <iostream>
using namespace std;

struct hello
    {
    public:     //by default also it is public
        hello();    
        ~hello();
    };

hello::hello()
    {
    cout<<"calling constructor...!"<<endl;
    }

hello::~hello()
    {
    cout<<"calling destructor...!"<<endl;
    }

int main()
{
hello obj;      //creating a hello obj, calling hello constructor and destructor 

return 0;
}



是。 結構就像一個類,但默認為public: :,在類定義和繼承時:

struct Foo
{
    int bar;

    Foo(void) :
    bar(0)
    {
    }
}

考慮到你的其他問題,我建議你閱讀一些教程 。 他們會比我們更快,更完整地回答你的問題。




C ++中的結構和類是相同的,除了默認情況下,結構成員是公共的,而類成員是私有的。 你可以在課堂上做任何你在結構中應該能夠做到的事情。

struct Foo
{
  Foo()
  {
    // Initialize Foo
  }
};



在C ++中,除了struct's默認成員訪問說明符public &class具有private外, structclass都是相等struct's

在C ++中使用struct的原因是C ++是C的超集,並且必須向後兼容legacy C types

例如,如果語言用戶試圖在他的C ++代碼中包含一些C頭文件legacy-ch並且它包含struct Test {int x,y};struct Test成員應該可以像C一樣訪問。




所有上述答案在技術上回答了提問者的問題,但只是想我會指出可能會遇到問題的情況。

如果你像這樣聲明你的結構:

typedef struct{
int x;
foo(){};
} foo;

嘗試聲明構造函數時會遇到問題。 這當然是因為你實際上沒有聲明一個名為“foo”的結構,你已經創建了一個匿名結構並為其分配了別名“foo”。 這也意味著你將無法在cpp文件中將範圍運算符用於“foo”:

foo.h中:

typedef struct{
int x;
void myFunc(int y);
} foo;

Foo.cpp中:

//<-- This will not work because the struct "foo" was never declared.
void foo::myFunc(int y)
{
  //do something...
}

要解決這個問題,你必須這樣做:

struct foo{
int x;
foo(){};
};

或這個:

typedef struct foo{
int x;
foo(){};
} foo;

後者創建一個名為“foo”的結構並為其提供別名“foo”,因此在引用它時不必使用struct關鍵字。




Links