您的位置:首页 > 编程语言 > C语言/C++

C++课堂笔记

2006-01-19 21:12 225 查看
建议初学者使用suse的linux操作系统
GNU gun is not unix
函数就是方法
有空详细研究PPT文件
array数组
gimps project寻找梅伸素数
数据结构
数学建模

&是取址运算符

指针中去掉*才是地址,否则就是值
ptr地址
*ptr值

返回值中: 0表示FAILS ,其他值表示TURE
重载的时候必须是成员函数,不能是友员函数

derivedclass 派生类
baseclass基类

对基类私有函数调用使用:
类名::私有成员函数名

通过虚函数,达到用基类指针访问派生类成员函数,个人认为这真正体现了继承
指针调用成员函数:指针->调用成员函数;
纯虚函数 ,就是在定义的时候后面给定=0(也可以在派生类中给出定义)
包含一个或多个纯虚函数的类叫做抽象类
抽象类可以做为派生同一种类的特定类的基类
抽象类不能实例化,但可以通过继承实现,所有的全通过派生类来完成

动态多态由称为动态联编,滞后联编

没使用指针会造成很多不必要的麻烦,自己应当多关注指针,指针是个很好也很好玩的玩意儿
同时,继承也能够在很大程度上简化程序的源代码, 是个不可多得的好工具

rectangle:n.矩形,长方形
square:n.正方形
triangle:n.三角形
pure class funtion纯虚函数

ambiguous歧义
运算符重载,一元运算符重载:把运算符做成类的成员函数

多重继承那里注意在virtual后面要加上public否则会认为是私有的类

this用法举例:this.aaa=aaa;

函数重载的问题及解决方案
重载机制的不足:参数数据类型发生变化,返回时的不到正确的结果
提出问题:如何简化代码???
解决方法:函数模板(是函数,一种通用型的函数)
{
template<class T> //定义函数模板class是数据类型,不是一个类 ,但可以认为是一个类。T可以为任意值
T 函数名字(参数列表) //以下为函数体 如T sum(T a,T1 b)

函数返回类型为第一个实参的类型
{
//定义函数体
}

}
不能用于字符串的比较,必须重写,如下(字符串的重载):
const char* max(const char* a,const char* b)
{
if(strcmp(a,b)>0)return a; //strcmp字符串比较大小的模板函数
//else可以不写出

return b;
}

引入结构体的目的:将不同类型的数据组合成一个有机整体以便引用
结构体定义:在一 个组合项中包含若干

struct student//定义结构体
{
int num;
char name;
char sex;
float mark;

};
经常将对结构体类型的生命集中

使用方法:
结构体变量名.成员名
结构体变量的初始化:
在定义时

插入 insertion 抽取 estraction 流stream

ios->streambuf //streambuf 类为IOS类及其派生类提供对数据的缓冲支持
缓冲(buffer):系统在主存中开辟一个专用的区域用来临时存放输入输出信息,这个区域成为缓冲区

iostream 包含成员函数:cin cout cerr标准错误输出 clog标准日志输出

alarm警报

类的参数可以用void disp(char *str)参数为字符串,这个等同于void disp(char str[])

(void *)cptr强制转换CPTR为指针,其中void *代表了空指针也可以看作是一种类型

单引号表示'a'表示ASCII码
双引号表示"a"字符
cin.get(char *str,int len,char delim='/n')函数原型,从键盘读取数据(char *str,int len,char delim='/n')str字符数为定义的len
cin.getline(char *str,int len,char delim='/n')提取一行字符
尽量使用getline而不用get
cin.read(char *pch,int nCount)

文件输入输出流,可以调用带一个参数的构造函数
ifstream infile("file1.txt")//在这里inflie和file1.txt可以认为是同一个文件,但是在别的地方可以变换
iftream::open是调用库里的一个lib的成员函数,需要在#include里声明
读写文件有两种方法:用函数调用成员函数和创建对象
ofstream里绝对路径不用“/”而是使用"//"表示
写入数据不建议使用PUT因为那只能写入一个字符
使用完文件后,使用:对象.close()及时关闭已打开的文件(例如:object.close()),为了防止文件在缓冲区内被其他进程被更改,文件不能被再次加载
文件从顺序上分:随机文件,数组文件
sfil.write((char*)&svar,sizeof(student))固定写法,写完记得关闭文件。sizeof可以理解为运算符,是查看student占用字节数的。svar应该是参数

ios::binary 以二进制方
式打开文件要用管道的话,就只能用read或write而不能用get或者put

修改一个文件内容,使用文件随机处理方式
一、以输入/输出模式打开文件
二、查找需要修改的记录
三、将指针置于需要修改的记录之首
四、修改值并在同一个地方重写此记录
五、关闭文件
istream& seekg(long off,ios::seek_dir dir);//其中的ios::seek_dir 指的是偏移量

在struct结构体中所有的都是公有的,总觉得类是结构体的延伸

链表比数组先进的地方在于可以不用连续的内存空间但是运算的速度比较慢 单个的称为结点node 空指针NULL
引用数组写的时候简单但是读程序的时候麻烦
*next是个关键字,表示下一个结点
建立一个链表后,头指针是不能动的
链表头指针的复制:设count是和head指针类型相同的指针,count=head
这节课,开始涉及到数据结构中的线形表的链表结构,讲到了遍历链表,单链表,双向链表,循环链表
使用链表的时候最好不用类,而用struct

string是字符和字符串的数据类型定义
要使用链表,必须在include包含<string.h>
const是常量的数据类型,在有指针的时候用的很多,作为固定指针使用
栈可以作为一个特殊的单链表
后缀表达式是栈的重要表达方式,在栈中6+2用后缀表达式62+,速度更快
队列先进先出,在某些时候是一个比较好的数学分析的工具

老师说我们的幻灯片页数做得太少了,主要是我们那里的字太小了,经研究决定,把原来的一张幻灯片整成两张,就解决问题了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: