在c++中,结构可以有构造函数吗?

我一直试图解决这个问题,但我没有得到语法。


当前回答

在c++中,struct和c++类只有一个区别,默认情况下,struct成员是public,类成员是private。

/*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;
}

其他回答

是的,c++中的结构和类是相同的,除了结构成员默认是公共的,而类成员默认是私有的。在类中可以做的任何事情,在结构中也应该可以做。

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

是的。结构就像一个类,但在类定义和继承时默认为public::

struct Foo
{
    int bar;

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

考虑到你的另一个问题,我建议你阅读一些教程。他们会比我们更快更全面地回答你的问题。

再举一个在构造函数中设置值时使用this关键字的例子:

#include <iostream>

using namespace std;

struct Node {
    int value;

    Node(int value) {
        this->value = value;
    }

    void print()
    {
        cout << this->value << endl;
    }
};

int main() {
    Node n = Node(10);
    n.print();

    return 0;
}

用GCC 8.1.0编译。

struct HaveSome
{
   int fun;
   HaveSome()
   {
      fun = 69;
   }
};

我宁愿在构造函数中初始化,这样就不需要保持顺序。

正如其他答案所提到的,在c++中,结构体基本上被视为类。这允许您拥有一个构造函数,可以使用默认值初始化结构。下面,构造函数将sz和b作为参数,并将其他变量初始化为一些默认值。

struct blocknode
{
    unsigned int bsize;
    bool free;
    unsigned char *bptr;
    blocknode *next;
    blocknode *prev;

    blocknode(unsigned int sz, unsigned char *b, bool f = true,
              blocknode *p = 0, blocknode *n = 0) :
              bsize(sz), free(f), bptr(b), prev(p), next(n) {}
};

用法:

unsigned char *bptr = new unsigned char[1024];
blocknode *fblock = new blocknode(1024, btpr);