C++ -- 构造函数 赋值函数 拷贝构造函数

Orenda ·
更新时间:2024-11-13
· 500 次阅读

C++ 基础知识

1. 类的声明,构造函数,拷贝构造函数,赋值函数
代码实现

class String { public: String(const char* initChar); String(const String& str); String& operator = (const String& str); private: char* m_data; } String::String(const char* initChar) { if(initChar == NULL) { m_data = new char[1]; m_data[0] = '\0'; } else { int length = strlen(initChar); m_data = new char[length + 1]; strcpy(m_data, initChar); } } String::String(const String& str)//拷贝构造函数首先是一个构造函数,所以申明中没有返回值 { //此处不需要对str判空,因为str 是引用,引用本身比可能是NULL. int length = strlen(str.m_data);//str 本身不能直接访问私有变量 m_data = new char[length + 1]; strcpy(m_data, str); } String& operator=(const String& str) { if(this == &str)//注意这个地方比较的是地址。 return *this;//我们需要的是变量(对象实体) if(m_data != NULL) delete[] m_data; int length = strlen(str.m_data); m_data = new char[length + 1]; strcpy(m_data, str); return *this; } 原则上,如果一个类中含有指针变量,则必须手动实现拷贝构造函数和赋值函数。防止因为浅拷贝造成的错误。 如果确实不需要,防止将来出错的方式是将拷贝构造函数和赋值函数声明为 私有函数。 class String { public: String(const char* str); private: String(const String & str); String& operator =(const String& str); } 在子类的赋值函数中需要给父类重新赋值: class base { public: base(); base(const base& b); base& operator =(const base& b); private: int m_i; } class derived:public base { public: derived(); derived& operator = (const derived& der); private: int m_x; } derived& operator =(const derived& der) { if(this == &der) return *this; base::operator=(der); m_x = der.m_x; }
作者:Hi Man



赋值函数 值函数 c+ 函数 拷贝构造函数 C++ 构造函数 赋值 拷贝

需要 登录 后方可回复, 如果你还没有账号请 注册新账号