欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

剑指offer面试题1

程序员文章站 2022-01-15 12:00:10
...

面试题1
题目:CMYString的声明,为该类型添加复制运算符函数。

#include <cstdio>
//#include <string>
#include <cstring>

class CMyString
{
public:
	CMyString(char* pData = nullptr);
	//实例从形参到实参会调用一次复制构造函数,
	//把参数申明为引用可以提高代码效率,加const不会改变实例的状态
	//只有返回一个引用才允许连续赋值
	CMyString(const CMyString& str); 
	~CMyString(void);
	//连续赋值
	CMyString& operator = (const CMyString& str);
    
    void print();


private:
	//记住释放实例内存
	//需判断传入的参数和当前的实例(*this)是否是同一个实例;
	//如果是,一旦释放自身内存,传入参数内存也会被释放的
	char* m_pData;
	
};

CMyString::CMyString(char* pData)
{
	if(pData == nullptr)
	{
		m_pData = new char[1];
		m_pData = '\0';
	}
	else 
	{
		int length  = strlen(pData);
		m_pData = new char[length + 1];
		strcpy(m_pData, pData);
	}
}
CMyString::~CMyString()
{
	delete[] m_pData;
}

CMyString& CMyString::operator =(const CMyString& str)
{
	if (this == &str)
		return *this;
	delete[] m_pData;
	m_pData == nullptr;

	m_pData = new char[strlen(str.m_pData) + 1];
	 strcpy(m_pData, str.m_pData);
	return *this;

} 

void CMyString::print()
{
	printf("%s\n", m_pData);
}

int main(int argc, char const *argv[])
{
	char* text = "Hello World!";
	CMyString str1(text);
	str1.print();
	CMyString str2;
	str2 = str1;
	str2.print();
	return 0;
}

用sublim 调试出现错误
In member function ‘CMyString& CMyString::operator=(const CMyString&)’:
E:\00��˶˶����ѧϰ\��ָoffer\secondTest\01OprateFunction.cpp:52:10: warning: statement has no effect [-Wunused-value]
m_pData == nullptr;
没搞明白

相关标签: LeetCode