请为CMyString类型编写构造函数、copy构造函数、析构函数和赋值运算符函数。

如下为类型CMyString的声明,请为该类型编写构造函数、copy构造函数、析构函数和赋值运算符函数。
 1 class CMyString
 2 {
 3 public:
 4     CMyString(const char* pData = nullptr);
 5     CMyString(const CMyString& str);
 6     ~CMyString(void);
 7
 8     CMyString& operator = (const CMyString& str);
 9
10     void Print();
11
12 private:
13     char* m_pData;
14 };

完整代码如下:

 1 #include<cstring>
 2 #include<cstdio>
 3
 4 using namespace std;
 5
 6 class CMyString
 7 {
 8 public:
 9     CMyString(const char* pData = nullptr);
10     CMyString(const CMyString& str);
11     ~CMyString(void);
12
13     CMyString& operator = (const CMyString& str);
14
15     void Print();
16
17 private:
18     char* m_pData;
19 };
20
21 CMyString::CMyString(const  char *pData)
22 {
23     if (pData == nullptr)
24     {
25         m_pData = new char[1];
26         m_pData[0] = ‘\0‘;
27     }
28     else
29     {
30         int length = strlen(pData);
31         m_pData = new char[length + 1];
32         strcpy_s(m_pData,length+1, pData);
33     }
34 }
35
36 CMyString::CMyString(const CMyString &str)
37 {
38     int length = strlen(str.m_pData);
39     m_pData = new char[length + 1];
40     strcpy_s(m_pData,length+1, str.m_pData);
41 }
42
43 CMyString::~CMyString()
44 {
45     delete[] m_pData;
46 }
47
48 CMyString& CMyString::operator = (const CMyString& str)
49 {
50     if (&str != this)
51     {
52         CMyString strTemp(str);
53         char* pTemp = strTemp.m_pData;
54         strTemp.m_pData = m_pData;
55         m_pData = pTemp;
56     }
57
58     return *this;
59 }
60
61 void CMyString::Print()
62 {
63     printf("%s", m_pData);
64 }

原文地址:https://www.cnblogs.com/shfanzie/p/10023819.html

时间: 2024-10-14 19:34:01

请为CMyString类型编写构造函数、copy构造函数、析构函数和赋值运算符函数。的相关文章

类String的构造函数(包含一个拷贝构造函数)、析构函数和赋值函数

每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数). class String { public: String(const char *str = NULL); // 普通构造函数 String(const String &other); // 拷贝构造函数 ~ String(void); // 析构函数 String & operate =(const String &other); // 赋值函数 // 相加函数,如果没

copy构造函数

copy构造函数定义 copy构造函数的定义:如果一个构造函数的第一个参数是自身类类型的引用,且额外参数都是默认值,则此构造函数时copy构造函数(摘自c++primer). class Foo { public: Foo(); Foo(const Foo&); //copy构造函数 } copy构造函数的形参必须引用类型:如果不是引用类型,为了调用copy构造函数,必须copy他的实参,但copy实参又需要copy构造函数,一直循环. copy构造函数何时发生: 1.显示地以一个对象的内容作为

WebApi接口访问异常问题。尝试创建“testController”类型的控制器时出错。请确保控制器具有无参数公共构造函数

本来运行的好好的webAPI 接口突然报了个 :“尝试创建“testController”类型的控制器时出错.请确保控制器具有无参数公共构造函数” 错误.耗了半宿最终解决了, 原因: api控制器中引用了 config 配置文件 没有的 key 值 private static string WatchSwitch = ConfigurationManager.AppSettings["WatchSwitch"].ToString().Trim(); //最小提现额度 config 文

【编程题】编写String类的构造函数、拷贝构造函数、析构函数和赋值函数

[编程题]编写String类的构造函数.拷贝构造函数.析构函数和赋值函数 [题目]:请编写如下4个函数 1 class String 2 { 3 public: 4 String(const char *str = NULL);// 普通构造函数 5 String(const String &other); // 拷贝构造函数 6 ~ String(void); // 析构函数 7 String & operate =(const String &other);// 赋值函数 8

正确地复制对象--oeprator=与copy构造函数

额,这个名字有点怪怪的=_= ok,下面进入正题,为了演示方便,代码只写出简略的部分. copy构造函数 class Base { public: Base() {} Base(const Base& ) { cout<<"Base copy "<<endl; } }; class Derived: public Base { public: Derived() {} Derived(const Derived& ind) {} }; 重点关注一

编写类String 的构造函数、析构函数和赋值函数

编写类String 的构造函数.析构函数和赋值函数,已知类String 的原型为:class String{public:String(const char *str = NULL); // 普通构造函数String(const String &other); // 拷贝构造函数~ String(void); // 析构函数String & operate =(const String &other); // 赋值函数private:char *m_data; // 用于保存字符串

C++类禁止copy构造函数和copy assign操作符

C++类禁止copy构造函数和copy assign操作符 在C++类中,编译器可以暗自为class创建default构造函数.copy构造函数.copy assignment操作符,以及析构函数.注意,这些编译器产生出来的函数都是public的,为了阻止这些函数被创建出来,我们可以把它们声明为private,这样就阻止了编译器暗自创建其对应版本函数. class Node { public: Node(int _data = 0) : data(_data) {} int get() cons

拷贝构造,深度拷贝,关于delete和default相关的操作,explicit,类赋初值,构造函数和析构函数,成员函数和内联函数,关于内存存储,默认参数,静态函数和普通函数,const函数,友元

 1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.第二种初始化的方式是直接在构造方法里面实现初始化. 案例如下: #include<iostream> //如果声明已经定义,边不会生成 class classA { private: int a; int b; public: //拷贝构造的规则,有两种方式实现初始化 //1.一个是通过在后面:a(x),b(y)的方式实现初始化 //2.第二种初始化的方式是直

C++构造函数 &amp; 拷贝构造函数 &amp; 派生类的构造函数 &amp; 虚继承的构造函数

构造函数 ,是一种特殊的方法 .主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 .特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载.(摘自百度百科构造函数). 一.最基本的构造函数 1 class Base 2 { 3 public: 4 Base(int var) : m_Var(var) 5 { 6 } 7 private: 8 int m_Var; 9 }; 以上构造函数的执行过程: