c++ primer plus 学习笔记

我的机子用Xcode,单位是字节

0开头为8进制

0x为16进制

cout默认输出的是10进制

wchar_t 宽字节,它是一种足够大的整形类型,可以用来表示的是比如中文的编码

c常量一旦被定义,就不能被修改(const)

浮点数,c++中浮点数在计算内存中由两部分组成,一部分为基数,一部分用来表示浮点,这个浮点是用二进制来表示。

非常大或者非常小的数可以用e表示法来表示

这个程序充分说明了精度的问题,double能保存更高的精度。对于c++来说float只能保存6位有效数字,如果需要更高的精度,使用double。  在默认情况下,浮点数的类型是double。

涉及不同类型的数进行运算,首先会把精度小的数转化为精度大的数。

auto 相当于var类型

尽量让编译器去计算元素数目更为安全。数组比字符串长,没有什么害处。

’s’ 和 “s”的区别, ’s’是一个单字符,代表一个ASCII码,而”s”代表2个字符’s’和‘\n’。

使用cin中的get()或者getline(),getline()读取一条语句。

get()方法使用的时候,输入wode,回车键—程序就退出了,也就说第二个get()获取了回车键。

解决上述出现的情况可以在词句后面加一个无参数的get()方法,

或者可以用数组的访问形式来访问string类型。

区别字符数组和string之间操作之间的差别。

对字符数组来说用在<cstring>类中得strcpy,strcat,strlen来进行复制和连接作用。

string的大小可以自动调整,也就是说可以在一个string类型变量后面不断加上字符串

而字符数组不行。

对于字符型数组来说,如果未被定义就使用strlen方法来数组长度的话,可能与字符数组定义的长度不一。strlen从数组的第一个元素开始计算字节数,直到遇到空字符。对于未被初始化的数组,空字符的出现是随机的,所以得到的数组长度可能与定义的不同

struct ,union  的区别

union一次只使用一个成员变量,,即成员变量是在一块内存中的。

枚举类型的取值范围是大于最大值的最小2的幂减一。

double占用8个字节 int  float4字节(我的)

在指针使用的时候特别注意下面的情况

这里说明的是指针初始化后,给地址分配了内存空间,但是他的值的内容并没有分配空间,所以直接使他的内容为单值是错误的。

数组其实和指针有很大的联系,数组可以看作一个指针,数组定义后,可以用指针的操作符去操作数组,

cout 和cin对于指针的使用,对于字符数组和字符串传入的是一个地址,而且是首个字符的地址。

所以cout<<ps-----可以打印他们的值,如果要显示他们的地址则cout<<(int *)ps ,这个时候才会打印ps指针和字符串的地址。

但是对于值类型来说,如 int *p cout<<p 则打印的是p的地址。

chark[]="helloworld";
   char* ps=newchar(strlen(k)+1);

strcpy(ps,k);

创建新的副本

用strcpy和strncpy来将字符串赋值给数组。

x=3,y=6

第四章总结

第四章对于动态数组和动态结构体有些陌生

这里相当于c#里的foreache语句,对于要改变数组值的地方用&x,而输出的话直接x;

EOF的使用xcode 是是ctrl+d的组合。

c++中将一指针数组初始化为一组字符串常量;

cin>>c;这个表达式也会有一个返回值,比如c是整型的,但是输入的却是个字符串,则返回false,输入的字符串还是保存在缓存区。

c++函数无法返回一个字符串 所以只能返回他的地址

这时候 函数中要创建一个新的指针变量 长度为字符串的长度加1 最后一位赋值为n+1

//c++函数指针——指正需要都用小括号括起来

double calculate(double x,double y,double (*p)(double,double)){

return p(x,y);

}

3-5

c++的泛型方法当有个特殊类型需要特殊对待的时候可以采取

template<> char * maxn<char *>(char * arr[],int arrSize)

的显示声明。

chaff *sc= new (buffer) chaff [2]; //method 1----在buffer的第一个元素内存上创建,buffer是个数组,这两个元素共用一个存储空间

对于一个事物存在多种状态,通常都是通过声明一个public的枚举,再在私有属性中添加个对象来表示不同的状态,比如坐标的直角坐标和极坐标

对于赋值运算符的重载,在构造函数中如果有new运算符,这这里需要先清除当前的内存,然后再进行赋值操作

3. 模板类型:

模板类性不是一种实类型,它必须等到类型绑定后才能确定最终类型,所以在实例化一个模板时,必须要能够让编译器“看到”在哪里使用了模板,而且必须看到模板确切的定义,而不仅仅是它们的声明,都则不能顺利地产生编译代码。因此,标准会要求模板的实例化与定义体放到同一编译单元中。

3-6

虚基类的作用:

多继承的基础上,使多层继承的子类所继承的相同的方法都来自基类

时间: 2024-12-28 00:38:44

c++ primer plus 学习笔记的相关文章

C PRIMER PLUS 学习笔记(一)

1显示程序执行的窗口一闪即逝.可以添加如下语句: getchar() 作用是获取键盘输入. 2 inf 和 nan float toobig = 3.4e38 * 100.0f; float not_a_number = asin(1.2);//math.h printf("%e \t %e\n", toobig,not_a_number); inf-表示无穷大,nan-Not-a-number 3 long double 的输出格式 long double x; x = 3.2e-5

C++ Primer Plus学习笔记之虚函数

C++ Primer Plus学习笔记之虚函数 C++语言的多态性有两种类型:静态多态性和动态多态性.函数重载和运算符重载就是静态多态性的具体表现,而动态多态性是指程序运行过程中才动态的确定操作所针对的对象,它是通过虚函数实现的: 1,虚函数的概念: 一个指向基类的指针可用来指向从基类派生的任何对象,这样就可以达到一个接口多个实现的访问了:虚函数是在基类中被冠以virtual的成员函数,它提供了一种接口界面.虚函数可以在一个或者多个派生类中被重新定义,但要求在派生类中从新定义时,虚函数的函数原型

C++ Primer Plus学习笔记之静态成员

C++ Primer Plus学习笔记之静态成员 关键字static可以用来说明一个类的成员(包括数据成员和成员函数),这样的成员被称为静态成员: 1,静态数据成员 在一个类中,若将一个数据说明前加上static,则该数据成为静态数据,静态数据成员被该类的所有对象共享.无论建立多少个该类的对象,都只有一个静态数据存储空间: 具体语法如下: 类型名 类名::静态数据成员[=常量表达式] 其中,常量表达式用于初始化类的静态数据成员: 静态数据成员属于类,而不属于对象,因为静态成员的存在是不依赖于某个

C++ Primer Plus学习笔记之继承类的初始化顺序

C++ Primer Plus学习笔记之继承类的初始化顺序 基类的构造函数,析构函数和操作符函数operator=是不能被派生类继承的: 那么,当创建一个派生类对象时,怎样调用基类的构造函数对基类的数据进行初始化呢??? 答案是:构造函数执行时遵行先兄长(基类),再客人(对象成员),后自己(派生类)的顺序: 另一方面,执行析构函数时,先执行派生类的析构函数,再执行基类的析构函数.原因是,对基类的破坏隐含了对派生类的破坏,所以派生类的析构函数必须先执行: #include<iostream> u

C++ Primer Plus学习笔记之运算符重载

C++ Primer Plus学习笔记之运算符重载 1,成员函数和友元函数选择的建议 下面我们先看两个例子: 成员函数重载 #include<iostream> using namespace std; class Complex { public: Complex(double r=0,double i=0) { re=r; im=i; } Complex operator+(const Complex& obj); Complex operator!(); void Display

C++ Primer Plus学习笔记之拷贝构造函数

C++ Primer Plus学习笔记之拷贝构造函数 1,什么是拷贝构造函数 拷贝构造函数有两个含义: 首先,它是一个构造函数,当创建一个新对象时,系统自动调用它: 其次,它将一个已经定义过的对象的数据成员逐一对应的复制给新对象: 如果一个类没有显式定义拷贝构造函数,C++编译器可以为该类产生一个缺省的拷贝构造函数.这个缺省的拷贝构造函数采用C的方式,将拷贝对象的内存一个字节一个字节的拷贝到拷贝对象的内存中(内存拷贝): 2,拷贝构造函数的作用 (1)创建一个新对象,并将一个已存在的对象拷贝到这

c++ primer plus学习笔记(栈指针)

c++ primer plus 程序清单14.5 程序清单14.6 模拟如下情况: 某人将一车文件交给plodson,如果plodson的收取蓝是空的,他将取出车中最上面的文件,将它放入收 取蓝,如果收取蓝是满的,他将取出栏中最上面的文件,并进行处理,然后放入发出蓝,如果收取蓝不空不满 plodson将采用抛硬币的方式来决定采取措施. 很明显,我们需要使用栈去管理上述文件. 1 #ifndef STACK_H_ 2 #define STACK_H_ 3 4 //定义类模板 5 template

《c++primer》学习笔记

花了一个多月时间总算是把这本书看完了,再去看自己家游戏的服务器的代码还是很难懂,里面用到了好多boost库的东西,不过这些东西很多都已经加入了c++11的新标准里了,要到自己能做服务器还得接着学,所以接下来的一个月开始看<C++标准库>. 把看<c++primer>的时候抄的笔记先誊在这里方便以后参考. #include 来自标准库的头文件使用<> 来自非标准库的头文件使用"" ------------------------------------

《C++ Primer》学习笔记【第一部分 基本语言】

第2章 整型的赋值:当我们试着把一个超出其范围的值赋给一个指定类型的对象时,结果如何?答案取决于类型是signed还是unsigned的.对于unsigned,编译器会将该值对unsigned类型的可能取值数目求模然后取所得值:对于signed类型,未定义行为,很多处理器处理方式和unsigned类似. 字符串字面值的连接:std::cout << "multi-line" L"literal " << std::endl;结果未定义,即连接