C++面向对象程序设计 课程笔记(二)
一、string class
1.拷贝构造(string(const string& str);)
(1)class中带指针,不要直接使用标准库中的拷贝函数,会产生指向同一位置的两个指针。
(2)private中成员为指针。
(3)动态分配空间
m_data= new char [strlen(cstr)+1];
注意未指定初值的情况(cstr=0)
m_data=new char[1];
2.拷贝赋值(string&operator =(const string& str);)
(1)检测自我赋值(防止后续的delete语句将自身释放)
if (this==&str)
return *this;
(2)释放this空间
delete[] m_data;
(3)重新创造
m_data= new char[strlen(str.m_data)+1]
(4)拷贝赋值
strcpy(m_data, str.m_data);
return *this;
3.析构函数(~string();)
delete[] m_data; 清理动态分配的内存
二、output函数
1.获得一个字符串的指针
char* get_c_str() const { return m_data; }
2.操作符<<重载
ostream& operator<<( ostream& os, const string & str)
{ os<<str.get_c_str();
return os;
}
三、堆栈(栈stack,堆heap)
1.stack 存在于某个作用域的一块内存空间
2.heap 由操作系统提供的一块全局的内存空间
3.static local objects在作用域结束之后依然存在,直到整个程序结束
4.global objects在整个程序结束之后才结束
5.new 先分配内存(operator new),然后转型(pc= static_cast<complex*>(mem);),构造函数(pc->complex::complex(1,2);)
6.delete 先调用析构函数(string::~string(ps)),再释放内存(operator delete(ps))
四、内存动态分配
1.动态分配所得的array
array new 必须要搭配 array delete
2.string*p=new string[3];
delete []p;
五、扩展补充
1.static(静态)
{static double m_rate;};
double account::m_rate=8.0;定义(语句执行完后获得内存)
2.调用static函数的方式:
(1)通过object调用
account::set_rate(5.0)
(2)通过class name调用
account a;
a.set_rate(7.0)
3.取得静态数据
static A& getInstance(return a;);
private:
A();
A(const A& rhs);
static A a;
4.调用静态数据
A::getInstance().setup();
5.类模板
6.函数模版
7.namespace std{ ... }
8.
网友评论