关于赋值的疑问: 什么时候需要重载赋值操作符? 编译器是否提供默认的赋值操作符? 答案:(1)编译器为每个类默认重载了赋值操作符 (2)默认的赋值操作符仅完成浅拷贝 (3)当需要进行深拷贝时必须重载赋值操作符 //赋值时携带外部资源时,需要深拷贝 (4**)赋值操作符与拷贝构造函数有相同的存在意义** 一般性原则: 重置复制操作符,必然需要实现深拷贝
编程实验:默认赋值操作符重载
编程实验:编程实验:数组类的优化
编译器默认提供的函数: 下面两个类等价
class Test
{
};
class Test
{
public:
Test();
Test(const Test&);
Test& operator= (const Test&);
~Test();
};
下面代码输出什么?为什么? string对象内部维护了一个指向数据的char*指针,这个指针可能在程序运行的过程中发生改变。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s = "098765";
const char* p = s.c_str();
cout << p << endl;
s.append("abcd");
cout << p << endl;
return 0;
}
下面的程序输出什么?为什么?
#include <iostream>
#include <string>
using namespace std;
int main()
{
const char* p = "12345";
string s = "";
s.reserve(100);
for(int i = 0; i < 5; i++)
{
s[i] = p[i];
}
if(!s.empty())
{
cout << s << endl;
}
for(int i = 0; i < 5; i++)
{
cout << s[i] << endl;
}
cout << s << endl;
return 0;
}
小结: (1)string类通过一个数据空间保存字符数据 (2)string类通过一个成员变量保存当前字符串的长度 (3)C++开发时尽量避免C语言中惯用的编程思想
|