使用基本类型复制构造函数和赋值运算符 我已经开始用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
不是必需的。无论如何,作为一种样式首选项,您仍然可以使用它来明确您引用的是该类的成员变量。请注意这个小警告。这是为了补充一个事实,不应以相同的方式命名局部变量和类成员(那是一种可怕的做法)