c++ vs2015重载赋值操作符代码示范

严重性    代码    说明    项目    文件    行    禁止显示状态
错误    C4996    'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    cc19a_demo    d:\users\tt2018\documents\visual studio 2015\projects\cc19a_demo\cc19a_demo\cc19a_demo.cpp    29    
解决方法:代码顶部添加 #define  _CRT_SECURE_NO_WARNINGS

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>//赋值操作符练习


using namespace std;

class String
{
public:
	String(char const *ptrChars="");
	String &operator=(String const&);
	String &operator=(char const *);//s="cat";这种方式
	String &operator=(char); //s='a';//单个字符
	void print();

private:
	char *ptrChars;

};
void String::print()
{
	cout << ptrChars << endl;
}
String::String(char const *chars)
{
	chars = chars ? chars : "";//判断是否(空)null,发now的音
	ptrChars = new char[std::strlen(chars)+1];
	std::strcpy(ptrChars,chars);
}
String &String::operator=(String const &str)
{
	if (strlen(ptrChars) != strlen(str.ptrChars)) //需要判断存储的空间长度是否一致,如果不一致。得动态分配一个新的存储空间,获取到需要保存的指针长度。
	{                                             //s的是hello,5个长度,s2是dog,3个长度。5与3长度不一致,新分配的ptrHold先获取到s2的长度,然后返回给ptrChars,ptrChars就是3的长度了。这样ptrChars才能保存新传入的str.ptrChars的值。
		char *ptrHold = new char[strlen(str.ptrChars)+1];
		delete[] ptrChars;
		ptrChars = ptrHold;//获取到后,又把ptrHold赋值给ptrChars,确保不会出错。

	}
	std::strcpy(ptrChars,str.ptrChars);
	return *this;//赋值操作必须返回对*this的引用
}

int main()
{
	String s("hello");
	String s2("dog");
	s.print();
	s2.print();
	s = s2; 

	s.print();

	//cout << "hello1" << endl;
	
	//getchar();
	system("pause");
	return 0;
}
发布了356 篇原创文章 · 获赞 186 · 访问量 89万+

猜你喜欢

转载自blog.csdn.net/txwtech/article/details/103611255