C++学习笔记(二)

描述

4、 常对象、常函数

(1) 常对象 :只能调用常函数; const Father p;

(2) 常函数 :成员函数之后加上const、函数内部不可以修改成员

属性;

代码:void func() const{}。

成员函数后面加const实质是修饰的是this的指向,this指针本身就是指针常量,指向不可以改,值可以改,再加上const之后,全都不可以改。 **注:普通对象也可以访问常函数。 **

但是在成员变量前加上mutable,常函数可以访问,常对象也可以访问。

5、 继承

指针

(1)菱形继承:(虚基类)

一个动物类,一个马类,继承了动物类; 同样,一个驴类也继承了动物类。 这时,一个骡子类不仅继承了马类,也继承了驴类,这个时候从动物类里继承的数据很容易产生二义性,有好多数据,我们调用骡子类的时候到底用哪一个?

解决方法:在马类和驴类继承动物类的关键字前加上virtual,使其成为虚基类即可。 数据只保存最新赋值那一份。

Class Anmial
{Public:int m_age;};
Class Ma:virtual public Anmial{};
Class Lv:virtual public Anmial{};
Class Luozi{};

6、文件:

C++里对文件操作,包含的头文件#include。

文件分为两种:

①文本文件:就是记事本; 以ASCII码形式存在计算机中;

②二进制文件:以二进制的形式存在计算机中。

操作文件三大类:

①ofstream:写操作;

②ifstream:读操作;

③fstream:读写操作。

写文件:

创建文件输出流对象:ofstream ofs;

打开文件:ofs.open(“文件路径”,打开方式);

写数据:ofs<<”写入数据”;

关闭文件:ofs.open();

文件打开方式:

Ios::in:读文件而打开文件;

Ios::out:写文件而打开文件;

Ios::ate:初始位置:文件尾;

Ios::app:追加方式写文件;

Ios::trunc:如果文件存在,先删除,再创建;

Ios::binary:二进制方式。

读文件:(和写文件基本一致)

7、栈:(先进后出)

(1)顺序栈:

栈底指针:bottom,元素顶部指针:top; 记录栈内元素个数|top-bottom|+1。 如果bottom=top,表示栈空。

(2)链栈:

优点:便于多个栈共享存储空间和提高效率,并且不存在栈满上溢的情况。

8、队列:(先进先出)

队头:用来删除数据,头指针front(队头元素前一个位置);

队尾:用来插入数据,尾指针rear(队尾最后一个元素位置);

(1)循环队列:环状空间。 元素个数=rear(尾指针)-front(头指针)

(a)rear-front>0,就是循环队列元素个数;

(b)rear-front<0,需要加上循环队列的容量;

(c)rear-front=0,队列为空或者满。

(2)链式队列:

头指针指向队头结点,尾指针指向队尾结点。

队空条件:front=rear=NULL。

循环队列采用的是顺序存储结构;

一循环队列Q(1:m),初始状态为front=rear=m,经过一些列操作后,front=30,rear=10.则,按照顺序查找下,最坏比较次数为m-30+10+1=m-19个元素,比较次数为m-20。

9、new运算符

new运算符是在堆区创建数据由程序员手动开辟,手动释放。 **new返回的是该数据类型的指针。 **

例如:int *p = new int(10);

释放:delete p;

例如:int *p = new int[10];

释放:delete []p;

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分