C++ primer plus (chapter4-1)

  前半部分简单,仅记录独特之处。而指针重要,另开一篇。

  C-风格字符串以空字符结尾。

strlen(char []); //(cstring和string.h)计算可见的字符数而不包含空字符

关于函数一般只记录其原型,有时为了会不符合语法,注释()是其所在头文件

  cin处理字符串时,使用空白来确定字符串的结尾,且读取时忽略空白,但会将其留在队列,故只能读取一个单词。

cin cin.getline(char [],int) //一次读取一行,以换行符确定结尾,且读取时丢弃,读取第个参数-1个字符储存到第一个参数。

  cin cin.get(char [], int)和getline()相同但不丢弃换行符cin.get()读取一个字符。cin.get(char [], int).get()和cin.getline(char [],int)作用相同。
  get()读取空行后将设置failbit,接下来的输入将被阻断,可以用cin.clear()恢复输入。输入字符串可能比分配的空间长,get(),getline()将把剩下的字符留在队列,而getline()还会设置failbit并关闭输入。
混合使用cin和getline()/get()经常会出现将enter留在队列,被认为是空行,造成failbit。

strcpy(char [], char [])  //(cstring和string.h)复制2到1
strcat(char [], char [])  //(cstring和string.h)把2加到1后面,去掉1后边的空字符。

getline()对于string是getline(cin,string),get()也是

原始字符串:字符表示的就是自己,没有转义符。用R来标识原始字符串,"(和)"来默认界定,但是可以在"和(来来改变默认界定符,但是前后必须同步,不用对称,也不能用空白符。如

R"+*("(AAAbbbbbbbb)",aaaaaaaaaa)+*"

在struct和class的结束声明}后边需要;
struct可以同时完成定义结构和创建结构变量的工作,

struct example
{
    int a;
    char b
} c,d;

//甚至可以初始化,
struct a
{
    int b;
    char c;
} d=
{ 2,‘a‘ }; //也可以用通用的{}进行初始化。

//也可声明没有名称的struct,
struct
{
    int a;
    char b;
} c; //之后便无法再创建该结构了,但是可以初始化和访问c;

  c++也允许像c一样指定占用特定位数的结构成员,  

struct bitfield
{
    unsigned int SN : 4; //4 bits for SN value
    unsigned int : 4; // 4 bits unused
    bool boolvalue 1 ;
} //字段类型应该为整型或枚举,没有名称的字段用来提供间距,每个成员都称为位字段。如bitfield中成员使用时应该说是两个和一个间距,如其初始化
bitfield example = { 278,true};

  union可以储存不同的数据,但是只能同时其中一种数据

union one4all
{
	int int_val;
	long long_val;
	double double_val;
};
int main(){
one4all value;
value.int_val=15;
cout<<value.int_val<<endl;
value.double_val=18.3;
cout<<value.double_val<<endl;
cout<<value.int_val; //error  我测试时输出是-858993459
}

上边出现错误的原因很容易看出struct和union的不同,union每次只能储存一个值一种类型,其用途之一便是,当数据项使用两种或多种类型(但不同时使用)时可以节省空间。当然union的大小就是其储存的最大成员。

  对于枚举类型,在不进行强制转换的情况下只能将定义枚举时使用的枚举量赋给这种枚举变量。

enum spectrum { red,orange,yellow,green,blue };
spectrum band=blue;spedctrm band1= spectrum(2); //valid spectrum band2=2; //invalid, 2 not an enumerato

枚举类型只定义的赋值运算符,枚举可以被提升为int类型,但是int不会自动转换为枚举类型,对不适当的值进行强制转换,结果是不确定的。

int value=1+red; //valid
spectrum band=red+orange; //invalid
spectrum color=spectrum (5); //undefined
时间: 2024-10-18 19:14:19

C++ primer plus (chapter4-1)的相关文章

C++ Primer快速学习 第一章 入门

很多人说C++Primer不适合于入门,本系列入门文章向大家证明了:这是一个谎言. 第一章 入门 本章介绍 C++ 的大部分基本要素:内置类型.库类型.类类型.变量.表 达式.语句和函数. 1.1. 编写简单的 C++ 程序 每个 C++ 程序都包含一个或多个 函数 ,而且必须有一个命名为 main.函数 由执行函数功能的语句序列组成.操作系统通过调用 main 函数来执行程序, main 函数则执行组成自己的语句并返回一个值给操作系统. 下面是一个简单的 main 函数,它不执行任何功能,只是

C++ Primer Plus的若干收获--(八)

接下我会比较系统的介绍OOP的核心--类这个概念.可能会写的比较繁琐,比较多,但是自己理解总是好的.还记得上学期刚开始的时候老师讲的数据结构,一上来就来个LIst的一个大类,结果全班就傻了,完全不知所云(ps:博主是数学系,只学过C),然后自己就坐在图书馆借了两大本C++书开始啃了起来,大概啃了两个月才把C++学了个大概,尤其是读到类这块都是三四百行的常常的代码,看的那叫一个痛苦啊.不过自此之后就真正喜欢上这门语言了,再到之后能用C++写上个一两千行的代码,才发现之前的努力还是有收获的.好了,废

C++ Primer笔记8_动态内存_智能指针

1.动态内存 C++中,动态内存管理是通过一对运算符完成的:new和delete.C语言中通过malloc与free函数来实现先动态内存的分配与释放.C++中new与delete的实现其实会调用malloc与free. new分配: 分配变量空间: int *a = new int; // 不初始化 int *b = new int(10); //初始化为10 string *str = new string(10, ); 分配数组空间: int *arr = new int[10];//分配的

C++ Primer 学习笔记_98_特殊工具与技术 --优化内存分配

特殊工具与技术 --优化内存分配 引言: C++的内存分配是一种类型化操作:new为特定类型分配内存,并在新分配的内存中构造该类型的一个对象.new表达式自动运行合适的构造函数来初始化每个动态分配的类类型对象. new基于每个对象分配内存的事实可能会对某些类强加不可接受的运行时开销,这样的类可能需要使用用户级的类类型对象分配能够更快一些.这样的类使用的通用策略是,预先分配用于创建新对象的内存,需要时在预先分配的内存中构造每个新对象. 另外一些类希望按最小尺寸为自己的数据成员分配需要的内存.例如,

C++ Primer 学习笔记_73_面向对象编程 --再谈文本查询示例

面向对象编程 --再谈文本查询示例 引言: 扩展第10.6节的文本查询应用程序,使我们的系统可以支持更复杂的查询. 为了说明问题,将用下面的简单小说来运行查询: Alice Emma has long flowing red hair. Her Daddy says when the wind blows through her hair, it looks almost alive, like a fiery bird in flight. A beautiful fiery bird, he

C++ Primer 学习笔记_74_面向对象编程 --再谈文本查询示例[续/习题]

面向对象编程 --再谈文本查询示例[续/习题] //P522 习题15.41 //1 in TextQuery.h #ifndef TEXTQUERY_H_INCLUDED #define TEXTQUERY_H_INCLUDED #include <iostream> #include <fstream> #include <sstream> #include <vector> #include <set> #include <map&g

C++primer 15.7.3节练习

练习15.26 写的时候不小心写到了派生类Disc_quote,其实是一样的,主要明白原理即可 1 #include <iostream> 2 #include <string> 3 #include <utility> 4 #include <memory> 5 #include <vector> 6 7 using namespace std; 8 9 class Quote { 10 public: 11 Quote() : bookNo(

C++ Primer 第四版课后练习解答 习题1.1

注意:本随笔是在<C++Primer(第四版)习题解答(完整版)>中直接抄录的.此处主要是便于本人以后反复阅读. 习题1.1 查看所用的编译器文档,了解它所用的文件命名规范.编译并运行本节的main程序. [解答] 一般而言,C++编译器要求编译的程序保存在文件中.C++程序一般涉及两类文件:头文件和源文件.大多数系统中,文件的名字由文件名和文件后缀(又称扩展名)组成.文件后缀通常表明文件的类型,如头文件的后缀可以是.h或.hpp等:源文件和后缀可以是.cc或.cpp等,具体的后缀与使用的编译

C++Primer 5th 练习 12.19

这阵子真是太忙了, 连续做了四个课设. 当然这并不能作为好久没写博客的借口, 没写博客的主要原因只有一个: 懒. 最近又开始回顾C++的语法与特性(据说C++就是一门需要反复回顾的语言),以及学习C++的编程规范. 敲了C++Primer 5th 上的一道典型的练习题,纪念一下这即将过去的2016. 题目描述: 定义你自己版本的 StrBlobPtr, 更新 StrBlob类, 加入恰当的 friend 声明及begin 和 end 成员. 这道题目主要是练习 智能指针 share_ptr 和

C++ Primer 学习笔记_19_类与数据抽象(5)_初始化列表(const和引用成员)、拷贝构造函数

C++ Primer 学习笔记_19_类与数据抽象(5)_初始化列表(const和引用成员).拷贝构造函数  从概念上将,可以认为构造函数分为两个阶段执行: 1)初始化阶段: 2)普通的计算阶段.计算阶段由构造函数函数体中的所有语句组成. 一.构造函数初始化列表 推荐在构造函数初始化列表中进行初始化 1.对象成员及其初始化 <span style="font-size:14px;">#include <iostream> using namespace std;