解释:
1.Mystring(const char* mstring)
<1>字符串mstring作为const char*类型传到赋值构造函数里
<2>不能对mstring进行修改,所以不会改变mstring
<3>但是把mstring的值传递给了定义的Mystring类型里的私有变量,也就是char*类型的m_string,这样就把mstring的值赋给了Mystring类型的类变量(指针常量引用,直接整个传递,用char*就可以把一整个字符串传递过去)
2.Mystring(const Mystring& a);
将Mystring类型的a拷贝到拷贝构造函数中
代码如下:
(运用了分文件,new开辟char字符空间)
string.cpp中的代码:
代码目的:
<1>将字符串"hello"赋值到a中char类型指针m_string开辟的空间中
<2>将字符串"world"赋值到b中char类型指针m_string开辟的空间中
<3>将a中char类型指针m_string开辟的空间中的字符拷贝给c中char类型指针m_string开辟的空间
#include<iostream>
#include<cstring>
#include"Mystring.h"
using namespace std;
void main()
{
Mystring a("hello");
Mystring b("world");
Mystring c(a);
a.display();
b.display();
c.display();
}
Mystring.h(声明)
#pragma once
#include<iostream>
using namespace std;
class Mystring
{
char* m_string;
public:
Mystring(const char* mstring);
void display();
Mystring(const Mystring& a);
~Mystring();
};
Mystring.cpp(赋值拷贝的两个Mystring类的内置函数如下)
void Mystring::display()为对字符串进行输出的可调用内置函数
#define _CRT_SECURE_NO_WARNINGS 是防止strcpy的运用出错
#define _CRT_SECURE_NO_WARNINGS
#include"Mystring.h"
Mystring::Mystring(const char* mstring)
{
m_string = new char[strlen(mstring) + 1];
strcpy(m_string, mstring);
cout << "赋值构造" << endl;
}
Mystring::Mystring(const Mystring &a)
{
m_string = new char[strlen(a.m_string) + 1];
strcpy(m_string,a.m_string);
cout << "拷贝构造" << endl;
}
void Mystring::display()
{
cout << m_string << endl;//在类的函数里可以调用私有变量,所以可以直接输出
}
Mystring::~Mystring()
{
cout << "Destructing " << m_string << endl;
delete[]m_string;
}