美文网首页
2018-01-07

2018-01-07

作者: 你有黑眼圈 | 来源:发表于2018-01-09 23:09 被阅读0次

                              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.

相关文章

网友评论

      本文标题:2018-01-07

      本文链接:https://www.haomeiwen.com/subject/tfemnxtx.html