本文主要是介绍【侯捷P9】String类的拷贝构造、拷贝赋值、析构函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 头文件
- cpp文件
头文件
P9.h
#ifndef __P9__
#define __P9__#include <iostream>
#include<cstring>using namespace std;
// class with pointer numberclass String
{
private:/* data */
char* m_data; // 动态分配 一个指针是 4 byte
public:String(const char* cstr=0 ); // 构造函数 设置默认值 只能在声明中有默认值String(const String& str); // 拷贝构造函数String& operator=(const String& str); // 拷贝赋值函数 只要返回的不是local object就可以传引用~String(); // 析构函数char* get_c_char() const; // 把这个函数声明为const成员函数// char* m_pub; // 测试用
};inline
String::String(const char* cstr ) // 构造函数的默认值不能出现在定义中
{std::cout<<"构造"<<endl;if (cstr){m_data = new char[strlen(cstr)+1];strcpy(m_data,cstr);}else{m_data=new char[1];*m_data='\0';}
}// 拷贝构造函数
inline
String::String(const String& str)
{cout<<"拷贝构造"<<endl;m_data=new char[strlen(str.m_data)+1]; // 开辟空间strcpy(m_data,str.m_data); // 拷贝
}// 拷贝赋值函数 --是一个类成员函数
inline
String& String::operator=(const String& str)
{ cout<<"拷贝赋值"<<endl;// 检测if(this==&str){return *this;}// 赋值delete[] m_data;m_data=new char[strlen(str.m_data)+1];return *this;
}inline
String::~String()
{ cout<<"析构函数"<<endl;delete[] m_data;
}inline char*
String::get_c_char() const
{ return this->m_data;
}// 输出字符串
inline ostream&
operator<<(ostream& os,const String& str) // const 对象不能访问非const成员函数// 这里的str是const对象,只能访问const的成员函数
{os<<str.get_c_char();return os;
}// // 输出字符串
// // 直接const成员变量访问成员变量
// inline ostream&
// operator<<(ostream& os,const String& str)
// {
// os<<str.m_pub<<endl;
// }#endif
cpp文件
P9.cpp
#include "P9.h"int main(int argc, char const *argv[])
{String str1("Hello"); //构造函数String str2; // 构造函数 // 定义(实现)中不能设置默认值cout<<"str1:"<<str1<<endl;String str3(str1); // 拷贝构造String str_test=str1; // 拷贝构造str2=str1; // 拷贝赋值return 0;
}
这篇关于【侯捷P9】String类的拷贝构造、拷贝赋值、析构函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!