Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用基本类型复制构造函数和赋值运算符 我已经开始用C++开发了,我对复制构造函数和赋值操作符有疑问。_C++ - Fatal编程技术网

使用基本类型复制构造函数和赋值运算符 我已经开始用C++开发了,我对复制构造函数和赋值操作符有疑问。

使用基本类型复制构造函数和赋值运算符 我已经开始用C++开发了,我对复制构造函数和赋值操作符有疑问。,c++,C++,我有这门课: class MyTime { private: unsigned char _hour; unsigned char _minute; float _second; signed char _timeZone; unsigned char _daylightSavings; double _decimalHour; public: MyTime(unsigned char hour, unsigned char minute,

我有这门课:

class MyTime
{
private:
    unsigned char _hour;
    unsigned char _minute;
    float _second;
    signed char _timeZone;
    unsigned char _daylightSavings;
    double _decimalHour;
public:
    MyTime(unsigned char hour, unsigned char minute, float second, signed char timeZone, unsigned char daylightSavings);
    MyTime(const MyTime& copySource);
    MyTime& operator=(const MyTime& source);
    ~MyTime();

    unsigned char getHour();
    unsigned char getMinute();
    float getSeconds();
    signed char getTimeZone();
    unsigned char getDayLightSavings();
    double getDecimalHour();
};
和复制构造函数和赋值运算符实现:

MyTime::MyTime(const MyTime& copySource)
{
    this->_hour = copySource._hour;
    this->_minute = copySource._minute;
    this->_second = copySource._second;
    this->_timeZone = copySource._timeZone;
    this->_daylightSavings = copySource._daylightSavings;
}

MyTime& MyTime::operator=(const MyTime& source)
{
    this->_hour = source._hour;
    this->_minute = source._minute;
    this->_second = source._second;
    this->_timeZone = source._timeZone;
    this->_daylightSavings = source._daylightSavings;

    return *this;
}
是否需要这些实现


我需要确保当我分配MyTime的实例时,它将创建一个带有其值的新实例。

否。当前的类不需要复制构造函数、赋值运算符或析构函数。编译器生成的代码将完全满足您的要求


此外,从样式POV来看,访问类成员不需要所有“this->”内容,除非您为局部变量选择了错误的名称,或者正在这样做。

否。您的类不需要复制构造函数、赋值运算符或析构函数。编译器生成的代码将完全满足您的要求


另外,从样式POV来看,访问类成员不需要所有“this->”内容,除非您为局部变量选择了错误的名称,或者正在这样做。

不,您的代码相当于默认的复制构造函数和赋值运算符。编译器将根据需要生成这些文件。根据经验,如果使用动态内存或某些没有复制语义的对象,则需要定义自己的版本


举个简单的例子,如果在构造函数中写入
new
,则必须在析构函数中写入匹配的
delete
,然后,必须使用复制构造函数和赋值运算符。如果您避免手动管理内存,则不必担心这些问题。

否,您的代码相当于默认的复制构造函数和赋值运算符。编译器将根据需要生成这些文件。根据经验,如果使用动态内存或某些没有复制语义的对象,则需要定义自己的版本


举个简单的例子,如果在构造函数中写入
new
,则必须在析构函数中写入匹配的
delete
,然后,必须使用复制构造函数和赋值运算符。如果您避免手动管理内存,则不必担心这些问题。

您的复制构造函数和赋值运算符只是将
copySource
source
中的值分别复制到实例中

您不是在创建新实例,只是用
copySource
source
的值覆盖实例的值

目前,您的类甚至不需要编写复制构造函数和赋值运算符,因为编译器将隐式地为您生成它们。 这是C++语言的一个特点,我建议阅读更多关于这方面的内容(NDMACO:我知道这可能不是最容易学习的来源,但它是最完整和准确的书面可用之一)。 将每个成员变量从一个实例复制到另一个实例不是问题,因此不需要您采取任何行动

作为你学习的后续行动,请看以下内容。从三个规则开始(理解为什么你的类不需要它们中的任何一个,如果它需要它们中的一个会发生什么),然后继续理解C++11的概念

最后一个次要的事情:使用冗长的<代码> -> >成员变量> /c>不需要在C++中,除非您需要明确地说,您指的是成员变量而不是局部变量,例如

class MyClass {
  public:

  int value = 33;

  void function() {
      int value = 42; // Now there's confusion
      std::cout << value; // 42
  }
};
class-MyClass{
公众:
整数值=33;
空函数(){
int value=42;//现在出现了混乱
std::cout
不是必需的。无论如何,作为一种样式首选项,您仍然可以使用它来明确您引用的是该类的成员变量。请注意这个小警告。这是为了补充一个事实,不应以相同的方式命名局部变量和类成员(那是一种可怕的做法)


在这些概念上仍然有许多东西可以添加或构建,但它们会使本文偏离主题。只要记住这些初步概念,你就可以结束这一天了。

你的复制构造函数和赋值操作符只是分别从
copySource
source
复制值以你为例

您不是在创建新实例,只是用
copySource
source
的值覆盖实例的值

目前,您的类甚至不需要编写复制构造函数和赋值运算符,因为编译器将隐式地为您生成它们。 这是C++语言的一个特点,我建议阅读更多关于这方面的内容(NDMACO:我知道这可能不是最容易学习的来源,但它是最完整和准确的书面可用之一)。 将每个成员变量从一个实例复制到另一个实例不是问题,因此不需要您采取任何行动

作为学习的后续,请看一看。从三个规则开始(理解为什么您的类不需要它们中的任何一个,以及如果需要它们中的一个会发生什么),然后继续理解C++11的概念

最后一个次要的事情:使用冗长的<代码> -> >成员变量> /c>不需要在C++中,除非您需要明确地说,您指的是成员变量而不是局部变量,例如

class MyClass {
  public:

  int value = 33;

  void function() {
      int value = 42; // Now there's confusion
      std::cout << value; // 42
  }
};
class-MyClass{
公众:
整数值=33;
空函数(){
int value=42;//现在出现了混乱
std::cout
不是必需的。无论如何,作为一种样式首选项,您仍然可以使用它来明确您引用的是该类的成员变量。请注意这个小警告。这是为了补充一个事实,不应以相同的方式命名局部变量和类成员(那是一种可怕的做法)