C++构造函数
BIG THREE
#ifndef __Complex__ #define __Complex__ class Complex { public: Complex(double real = 0, double image = 0,const char * name = nullptr); virtual ~Complex(); Complex(const Complex&com); Complex& operator=(const Complex &com); Complex& operator+=(const Complex &com); double Real() const; double Image() const; private: double _real; double _image; char * _name; }; #endif
#include "Complex.h" #include "string.h" Complex::Complex(const double real, const double image, const char *name) :_real(real), _image(image) { if (name) { size_t len = strlen(name) + 1; _name = new char[len]; strcpy_s(_name, len, name); } else { _name = new char[1]; *_name = '\0'; } } Complex::~Complex() { if (_name) delete[]_name; _name = nullptr; } Complex::Complex(const Complex & com) { _real = com._real; _image = com._image; _name = nullptr; if (com._name) { size_t len = strlen(com._name) + 1; _name = new char[len]; strcpy_s(_name, len, com._name); } } Complex & Complex::operator=(const Complex & com) { _real = com._real; _image = com._image; if (this == &com) return *this; delete[] _name; _name = nullptr; if (com._name) { size_t len = strlen(com._name) + 1; _name = new char[len]; strcpy_s(_name, len, com._name); } return *this; } Complex& Complex::operator+=(const Complex & com) { _real += com._real; _image += com._image; return *this; } double Complex::Real() const { return _real; } double Complex::Image() const { return _image; }
#include "Complex.h" int main() { Complex number = Complex(2, 1, "Hello"); Complex number2(number); number2 = number; number = number; return 0; }
注:
重载=赋值运算符时有两个要点:
- delete[] _name; _name = nullptr; 需要将原本的内存释放;
- if (this == &com) return *this; 需要判断是否是自我赋值!