C++学习笔记

1、#pragma预处理命令
#pragma comment。将一个注释记录放置到对象文件或可执行文件中。
#pragma pack。 用来改变编译器的字节对齐方式。
#pragma code_seg。它能够设置程序中的函数在obj文件中所在的代码段。如果未指定参数,函数将放置在默认代码 段.text中
#pragma once。保证所在文件只会被包含一次,它是基于磁盘文件的,而#ifndef则是基于宏的。

2、若以”a+”方式打开一个已存在的文件,原文件如果不存在,则创建,如果存

在则打开,并且将文件位置指针移到文件尾,可以在文件尾进行数据添加,也可以从文件

开头处进行读数,但文件位置指针不可移到文件头,不能进行重写操作。

3、++运算符的对象必须是左值,而表达式的值都是右值。
区分左值与右值的最简单方式就是:左值可以对其取地址赋值,右值不可以取地址。

4、在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。

1 基本操作

(1)头文件#include.

(2)创建vector对象,vector vec;

(3)尾部插入数字:vec.push_back(a);

(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。

(5)使用迭代器访问元素.

vector::iterator it; for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
(6)插入元素: vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;

(7)删除元素: vec.erase(vec.begin()+2);删除第3个元素

vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始

(8)向量大小:vec.size();

(9)清空:vec.clear();

5、const出现在 * 的左边表示被指物是常量,出现在右边表示指针本身是常量。

6、设有两个字符串为str1,str2,
若str1==str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。

7、静态的使用注意事项:

(1).静态方法只能访问静态成员(包括成员变量和成员方法)

非静态方法可以访问静态也可以访问非静态

92).静态方法中不可以定义this,super关键字

因为 一个类中,一个static变量只会有一个内存空间,虽然有多个类实例,但这些类实例中的这个static变量会共享同一个内存空间。静态方法在优先于对象存在,所以静态方法中不可以出现this,super关键字。

(3).主函数是静态的。
程序运行的时候,静态成员已经加载在内存里面了,但是包含静态成员的对象共享这些静态成员,
比方说,A有一个静态成员public static int i;那么程序运行的时候,这个i就加载进内存了,A的所有对象的i变量都指向这个静态空间的i,也就是说创建对象之前,它就占空间了
1:只有类的成员函数才能说明为虚函数;
2:静态成员函数不能是虚函数;
3:内联函数不能为虚函数;
4:构造函数不能是虚函数;
5:析构函数可以是虚函数,而且通常声明为虚函数

8、main函数的返回类型必须为int。

9、可寻址的最小内存块为字节,存储的基本单元为字。

10、带符号类型可以表示正数、负数或0,无符号类型则仅能表示大于等于0的值。

11、如果赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数
eg:unsigned char c = -1;
c=255;
取模运算时,对于负数,应该加上被除数的整数倍,使结果大于或等于0之后,再进行运算.
(-1)%256=(-1+256)%256=255%256=255;
当赋给带符号类型一个超出它表示范围的值时,结果是未定义的,此时程序可能继续工作,可能崩溃,也可能生成垃圾数据。

12、算数表达式中既有无符号数又有int值是,int值会转换成无符号数
正数转换为无符号数直接用原码表示,负数则用补码,即反码+1.结果等于这个负数加上无符号数的模。

13、以0开头的整数代表八进制数,以0x或0X开头的代表十六进制数

14、静态联编 :指在编译阶段就将函数实现和函数调用关联起来,也叫早绑定。
动态联编:在程序执行的时候才将函数实现和函数调用关联。因此也叫晚绑定,一般情况下都是静态联编,涉及到多态和虚拟函数就必须使用动态联编了。

15、一般情况下,单目运算符最好重载为类的成员函数;双目运算符则最好重载为类的友元函数。
以下一些双目运算符不能重载为类的友元函数:=、()、[]、->。
类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数。 C++提供4个类型转换函数:reinterpret_cast(在编译期间实现转换)、const_cast(在编译期间实现转换)、stactic_cast(在编译期间实现转换)、dynamic_cast(在运行期间实现转换,并可以返回转换成功与否的标志)。
若一个运算符的操作需要修改对象的状态,选择重载为成员函数较好。
若运算符所需的操作数(尤其是第一个操作数)希望有隐式类型转换,则只能选用友元函数。
当运算符函数是一个成员函数时,最左边的操作数(或者只有最左边的操作数)必须是运算符类的一个类对象(或者是对该类对象的引用)。如果左边的操作数必须是一个不同类的对象,或者是一个内部 类型的对象,该运算符函数必须作为一个友元函数来实现。
当需要重载运算符具有可交换性时,选择重载为友元函数。

16、fseek函数的第一个参数是文件指针,第二个参数应是位移量,第三个参数是起始点。

16、预处理是 C 语言程序从源代码变成可执行程序的第一步,主要是 C 语言编译器对各种预处理命令进行处理,包括头文件的包含、宏定义的扩展、条件编译的选择等。
编译之前,C 语言编译器会进行词法分析、语法分析 (-fsyntax-only) ,接着会把源代码翻译成中间语言,即汇编语言 。 编译程序工作时,先分析,后综合,从而得到目标程序。所谓分析,是指词法分析和语法分析;所谓综合是指代码优化,存储分配和代码生成。 值得一提的是,大多数的编译程序直接产生机器语言的目标代码,形成可执行的目标文件,但也有的编译程序则先产生汇编语言一级的符号代码文件,然后再调用汇编程序进行翻译加工处理,最后产生可执行的机器语言目标文件。
链接是处理可重定位文件,把它们的各种符号引用和符号定义转换为可执行文件中的合适信息( 一般是虚拟内存地址 ) 的过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值