c++ - 我们可以直接为任何数据成员赋值。为什么使用构造函数?

标签 c++

我给数据成员赋值为什么需要使用构造函数?

我无法创建类构造函数,并且我分配变量的值并且我的代码在不创建构造函数的情况下运行?那么为什么要使用构造函数

我的问题是我们可以直接为任何数据成员赋值。看我的代码:

#include <iostream>
#include <conio.h>

class calculator {
  public:
    int n1=100;
    char grade='a';

    //  public:

    // calculator()
    // {
    //     grade='a';
    //     n1=100;

    // }

    void display()
    {
          std::cout << "first value:" <<grade<< std::endl;
          std::cout << "second value:" <<n1<< std::endl;
    }

};
int main()
{
    calculator cal;
    cal.display();
    return 0;
}

o/p 是:

  • 第一个值:a
  • 第二个值:100

什么时候

#include <iostream>
#include <conio.h>

class calculator {


    int n1;
    char grade;

  private:

    calculator()
    {
         grade='A';
         n1=100;

    }

    void display()
    {
          std::cout << "first value:" <<grade<< std::endl;
          std::cout << "second value:" <<n1<< std::endl;
    }

};
int main()
{
    calculator cal;
    cal.display();
    return 0;
}

突然我想访问私有(private)数据成员(例如员工工资)那么如何访问私有(private)数据?

最佳答案

构造函数的工作是初始化对象,使其处于一致且可用的状态。这意味着它应该确保所有成员都有合理的初始值,并且应该建立类不变量。

如果您不使用构造函数,而是在每次创建对象时手动初始化成员,那么您首先会在各处重复该工作,其次有时您可能会忘记初始化某些内容 - 这会导致让对象处于不一致的状态。

此外,大多数成员不应该是公共(public)(因为这会让您无法控制它们的访问/修改方式)以及何时私有(private) 构造函数(或类内初始化)是初始化它们的唯一方式。

关于c++ - 我们可以直接为任何数据成员赋值。为什么使用构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57746334/

相关文章:

c++ - 有什么需要,局部静态变量在编译时分配内存?

c++ - Python-C++ 接口(interface)中的内存泄漏?

用于制作 GUI 的 C++ 库

c++ - 什么放在cpp和什么到h文件

c++ - 如果不这样做,函数如何在新线程上运行 "as if"?

c++ - 行内说明符

c++ - G++ 生成逻辑错误的汇编代码

c++ - 后台应用监听快捷键?

c++ - cout 上抽象类的多态性

c# - 卷影复制,以及从任意文件夹加载的混合 C# 和 C++ DLL