#include <iostream>
using namespace std;
class MyString {
public:
MyString(const char* cstr = 0){
if (cstr) {
m_data = new char[strlen(cstr) + 1];
strcpy(m_data, cstr);
}
else
{
m_data = new char[1];
*m_data = '\0';
}
}
MyString(const MyString &str) {
m_data = new char[strlen(str.m_data) + 1];
strcpy(m_data, str.m_data);
}
MyString& operator= (const MyString &str) {
if (this == &str) return *this;
delete[] m_data;
m_data = new char[strlen(str.m_data) + 1];
strcpy(m_data, str.m_data);
}
~MyString(){
delete[] m_data;
}
char* get_c_str() const { return m_data; }
private:
char* m_data;
};
ostream& operator<< (ostream& os, const MyString &str) {
os << str.get_c_str();
return os;
}
int main() {
int a = 10;
MyString s1; // 注意 与下一行的区别,此处意思是:定义了一个名为s1的MyString对象
//在默认情况下s1会调用默认构造函数 MyString(),次处是调用MyString(const char* cstr = 0);
MyString SS1(); // 注意 与上一行的区别,此处意思是:
//不会调用 MyString 类的构造函数,而是声明了一个返回 MyString 对象的函数 SS1()。
//因此,这行代码并不会创建一个 MyString 对象,不会分配内存。
//而是声明了一个名为 SS1、无参数、返回 MyString 类型的函数。
MyString s2("hello");
MyString s3(s2);
s1 = s2;
MyString* p = new MyString("hello");
cout << s1 << endl;
cout << s2 << endl;
cout << s3 << endl;
return 0;
}
带指针成员变量类的拷贝构造与拷贝赋值
最新推荐文章于 2024-05-07 21:23:18 发布
文章展示了如何在C++中定义一个名为MyString的类,该类实现了从字符数组构造、拷贝构造以及赋值运算符的功能。MyString对象s1、s2、s3和动态分配的对象通过不同构造方式初始化,并进行了输出。
2319

被折叠的 条评论
为什么被折叠?



