c++ - 试图用我对 CPP 中构造函数的理解来理解

标签 c++

让我们讨论下一个代码示例:

class A
{
public:
    int a;
};

class B:public A
{
public:

    int a;
};


int main()
{
    B b;
    std::cout << b.a;
    system("pause");
    return(0);
}

为什么如果我这样写,那么它不能编译,并给我错误。

但是如果我向 B 类添加一个构造函数,如下所示:

B()
{
// An empty constructor!!!
}

然后它在屏幕上打印一个垃圾值(“a”变量值)。 如果我像这样编写类,为什么我不需要任何构造函数:

 class B:public A
 {
 public:
     int a = 5;  // 5 is just one of many possibilities...
 };

在这种情况下,5 将打印在屏幕上。

最佳答案

通过执行以下任一操作,构造函数可用于为数据成员分配或初始化值:

B()
   :a(5) // intialize a with value 5
{

}

B()
{
    a = 5; // assign a with value 5
}

第二个用垃圾值初始化 a,然后将 5 赋给它。

数据成员在构造函数体执行之前被初始化。

And why I dont need any constructor if im writing the class like this:

并不是说你不需要构造函数,只是它已经有了一个值。

关于c++ - 试图用我对 CPP 中构造函数的理解来理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41789820/

相关文章:

c++ - 模板类方法语法

c++ - dynamic_cast 类型不完整的问题

c++ - 为什么 MSVC 在覆盖具有正确签名的函数时会产生 C3668 错误?

c++ - 如何在程序代码中设置 DLL 的版本?

c++ - 将 lambda 作为构造函数参数传递

c++ - header 仅当包含在 header 中但不包含在cpp文件中时才引发错误

变量重新分配中的 C++11 内存释放

c++ - 为什么我的 visual c++ 在堆栈损坏的情况下不触发堆栈损坏错误

c++ - 为什么在使用堆叠 std::array 声明多维数组时需要 "double braces"?

c++ - swprintf 和 vswprintf 未声明?