为什么c ++中的结构不需要构造函数?

时间:2016-02-07 20:01:45

标签: c++ c++11

我从2年左右开始做C ++,我说为什么我们需要类中的构造函数而不是结构,以及为什么我们不能在结构中进行构造函数重载...

2 个答案:

答案 0 :(得分:9)

  

为什么我们需要类

中的构造函数

我们没有。

// Perfectly valid
class Foo
{
public:
    int x
};
  

为什么我们不能在结构中进行构造函数重载...

我们可以。

// Look, ma!
struct Bar
{
   Bar operator+(const Bar& other);
};

我不知道你在哪里听到这些说法,但肯定不是试图把它弄出来的。

<强> A user-defined type declared with the keyword struct is a class.

答案 1 :(得分:2)

C ++中structclass之间的唯一区别是可见性;结构默认为public,而类默认为private

然而,一旦超过初始可见度,它们就无法区分。结构是一个具有默认公共可见性的类。

这两段代码具有完全相同的效果。

struct MyClass {
    MyClass(int i) : m_i(i) {}
    int getI() const { return m_i; }
    void setI(int i) { m_i = i; }
private:
    int m_i;
};

// is exactly the same as

class MyClass {
public:
    MyClass(int i) : m_i(i) {}
    int getI() const { return m_i; }
    void setI(int i) { m_i = i; }
private:
    int m_i;
};

或换句话说

class MyClass {
    int m_i;
public:
    MyClass(int i) : m_i(i) {}
    int getI() const { return m_i; }
};

struct MyClass {
private:
    int m_i;
public:
    MyClass(int i) : m_i(i) {}
    int getI() const { return m_i; }
};