1.含指针数据类的设计 必须包含 拷贝构造 拷贝赋值,析构
2. &出现在typename的后面,叫做引用,&出现在object的前面,叫做取地址,得到的是指针
3. array new 要搭配array delate
代码如下:
//
// Created by zlc on 2020/3/29.
//
//含指针数据类的设计 必须包含 拷贝构造 拷贝赋值,析构
#ifndef STRING_MYSTRING_H
#define STRING_MYSTRING_H
//class My_string;
class My_string{
public:
My_string(const char* cstr =0);//不会改变输入的字符串,默认指向0
//拷贝构造
My_string(const My_string& str);//不会改变这个蓝本 加const
//拷贝赋值
My_string& operator = (const My_string& str);
~My_string();
char * get_c_str() const { return m_data;}
private:
//字符串其实就是字符数组,放指针动态分配大小
char* m_data;
};
#include <cstring>
My_string::My_string(const char *cstr) {
if(cstr){
//字符串是以'/0'结尾
m_data = new char[strlen(cstr)+1];
strcpy(m_data, cstr);//将传进来的内容拷贝到
}
else{
//未指定初值
m_data = new char[1];
*m_data = '\0';
}
}
inline
My_string::~My_string() {
//array new 对应array delate
delete [] m_data;
}
//拷贝构造函数
My_string::My_string(const My_string& str) {
//直接取另一個 object 的 private data.
// (兄弟之間互為 friend)
m_data = new char[strlen(str.m_data)+1];
strcpy(m_data,str.m_data);
}
//拷贝赋值
My_string& My_string::operator=(const My_string& str){
//考虑是否是自我赋值,来源端和目的端相同
//My_string&中 &出现在typename的后面,叫做引用
//&str中 &出现在object的前面,叫做取地址,得到的是指针
if(this == &str)
return *this;
delete[] m_data;
m_data = new char[strlen(str.m_data)+1];
strcpy(m_data,str.m_data);
//不管是传出去的是值还是引用,*+指针
return *this;
}
#include <iostream>
using namespace std;
ostream& operator <<(ostream& os,My_string& str)
{
return os<< str.get_c_str();
}
#endif //STRING_MYSTRING_H
main 函数:
在这里插入代码片
#include <iostream>
#include "myString.h"
int main() {
My_string s1("hello");
My_string s3=s1; //拷贝赋值
My_string s2(s1);//拷贝构造
std::cout<<s1<<endl<<s2<<endl<<s3<<endl;
return 0;
}