c++ 复合类型 读书笔记(二)
目录
- String类
- string拼接 赋值
- struct
- 结构数组
- 结构中的位字段
- 共用体(union)
- 枚举(enum)
- 设置枚举量的值
- 枚举量的取值范围
- 指针与c++基本原理
- 声明和初始化指针
- 指针与数字
- 引用
String类
使用string类,要包含头文件string;
string类位于名称空间std中,因此要提供一条using编译指令,或者使用std::string
#include <iostream>
#include <string>int main()
{using namespace std;string str1;string str2="bottom";cin>>str1;cout<<str2[2];return 0;
}
string拼接 赋值
string str1;
string str2="top";
str1=str2;//这种用法在数组中不被允许的
string的拼接可以用运算符+将两个string对象合并起来;
strcpy(str1,str2); //把str2的值拷贝给str1 等同于str1=str2
strcat(str1,str2); //把str2的内容添加到str1的后面这两个函数比上面两个函数多了一个参数(长度N)
strncpy();
strncat();
确定字符串中字符数的方法:
int len = str1.size(); //size()是类的一个方法,
int len1 = strlen(str1);
struct
c++中在声明结构体变量时,struct可省略;
与c中结构体不同的是,c++结构除了成员变量之外,还可以有成员函数;
c++中可以使用赋值运算符=将结构赋值给另一个同类型的结构,这种赋值被称为成员赋值;
struct person
{string name;int age;char sex;
};
person zs={"zhangsan",20,'m'};//在定义结构的同时完成创建结构变量的工作
struct person
{string name;int age;char sex;
}zs;
//这种没有名称的结构类型,除了在定义结构类型的时创建变量,以后就无法创建这种类型的变量
struct
{string name;int age;char sex;
};
结构数组
person pop[100];
这里的pop是一个person类型的数组,它的每一个元素都是person对象;
cout<<pop[2].name;在初始化结构数组:
person pop[2]=
{{"zhangsan",20,'m'},{"lisi",15,'n'}
};
结构中的位字段
字段的类型应为整型或枚举,可以使用没有名称的字段来提供间距。每个成员都被成为位字段。
struct regi
{unsigned int sn:4;unsigned int : 4;bool goodin:1;bool goodtor :1;
};初始化也以通常的方式去初始化这些字段;访问也是。
共用体(union)
共用体是一种数据类型,它能够存储不同的数据类型,但只能同时存储其中的一种类型。
共用体的长度是其最大成员的长度。
用途:当数据项使用的是两种或更多中格式时(不会同时使用),可节省空间;
当结构的其中一个数据成员为共同体时,要访问共用体当中的成员要使用:
结构体变量.共用体变量.共用体成员
若共用体为匿名共用体。其成员将成为位于相应地址处的变量,由于他们的地址相同。所以不需要中间标识符,访问时使用:
结构体变量.共用体变量
枚举(enum)
提供一种创建符号常量的方式
enum spet {red,orange,yellow,green,blue,violet,indigo,ultraviolet};这条语句完成了:
让spet成为新类型的名称,spet被称为枚举
将{red,orange,yellow,green,blue,violet,indigo,ultraviolet作为符号常量,它们对应的数值为0~7.这些常量叫做枚举量。
在不强制类型转换的情况下,只能将定义枚举时使用的枚举量赋给枚举的变量;
例如:
spet band ;
band= orange;//若band=1则为错误,因为1不是枚举量,orange才是
设置枚举量的值
显示的设置枚举量的值;
enum bits{one=1,two=2,four=4};指定的值要为整数。也可以显示的定义部分枚举量的值
enum bits{one,two=100,fou};
one在默认情况下为0,后面没有被初始化的枚举量的值将比前面的枚举量的值大1;fou为101还可以创建多个值相同的枚举量:
enum {zero,null=0,one,numero=1};
其中zero,null都为0,one,numero都为1
枚举量的取值范围
每个枚举都有取值范围,通过强制转换,可以将取值范围中的任何整数值赋给枚举变量。即使这个值不是枚举值。
enum bits{one=1,two=2,four=4};
bits flag;
flag=bits(3);3不是枚举值,但他位于枚举定义的取值范围内;
取值范围定义:首先,找出上限,需要知道枚举量的最大值。找到大于这个最大值的,最小值的2的幂。将他减去1,得到的是取值范围的上限,如果最小值不小于0,则取值范围的下限为0;例如最大值为101,比这个数大的最小2次幂是128,因此上限为127;下限与上限相同,但要加上负号。
选择用多少空间来存储枚举有编译器决定;
指针与c++基本原理
面向对象编程与传统的过程性编程的区别在于。oop强调的是在运行阶段进行决策,运行阶段指的是程序正在运行时,编译阶段指的是编译器将程序组合起来时。
运行阶段决策提供了灵活性,可以根据当时的情况进行调整。
在c++中,使用关键字new请求正确数量的内存以及使用只恨来跟踪新分配的内存的位置。
声明和初始化指针
指针在声明是必须指定指针指向的数据的类型。
在c++中,int* 是一种复合类型,是指向int的指针
在使用指针时,要注意!
在c++中创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存。为数据提供空间是一个独立的步骤。
要在对指针应用解除引用运算符之前,将指针初始化为一个确定的,适当的地址。错误实例:
long *follow;
*follow=233;
指针与数字
要将数字值作为地址来使用,应通过强制类型转换将数字转换为适当的地址类型:
int* pt;
pt=(int *0)0xB9000000;
引用
在声明引用变量时进行初始化,必须在创建时进行初始化;
c++ 复合类型 读书笔记(二)相关推荐
- 《How Tomcat Works》读书笔记(二)
<How Tomcat Works>读书笔记(二) 这是<How Tomcat Works>第一二章的读书笔记.第一张主要写了一个静态资源处理的web服务器,第二章加了对ser ...
- oracle直查和call哪个更快,让oracle跑的更快1读书笔记二
当前位置:我的异常网» 数据库 » <>读书笔记二 <>读书笔记二 www.myexceptions.net 网友分享于:2013-08-23 浏览:9次 <> ...
- 3D游戏设计读书笔记二
3D游戏设计读书笔记二 一.简答题 • 解释 游戏对象(GameObjects) 和 资源(Assets)的区别与联系. GameObjects是一个具体的实例,Assets是包括诸多游戏素材的资 ...
- 《Docker 技术入门与实践》-读书笔记二
<Docker 技术入门与实践>-读书笔记一 <Docker 技术入门与实践>-读书笔记二 一.数据管理 用户在使用 Docker 的过程中,往往需要能查看容器内应用产生的数据 ...
- 《Introduction To Modern Cryptography》读书笔记二
<Introduction To Modern Cryptography>读书笔记二 本笔记纯粹个人读书习惯与相应见解,内容归纳完全出于个人需要与个人局限,如有修改意见(比如哪儿应该是值得 ...
- 《李元芳履职记》读书笔记二 IT技术管理的沟通与团队建设
<李元芳履职记>读书笔记二 接一 https://blog.csdn.net/qq_45937199/article/details/103305223 IT技术人员从技术岗走向管理岗,所 ...
- python图像处理《数字图像处理与python实现》读书笔记二:空间滤波
文章目录 重要! 第三章 空间滤波 概览 3.1 空间滤波基础 3.1.1 空间滤波的机理 3.1.2 空间滤波器模板 3.2 平滑处理 3.2.1 平滑线性空间滤波器 3.2.2 统计排序滤波器 3 ...
- 第一行代码 Android读书笔记(二)
第一行代码 Android读书笔记 第三章 软件也要拼脸蛋-UI开发的点点滴滴 常用控件的使用方法 详解4种基本布局 自定义控件 最常用和最难用的控件-ListView 更加强大的滚动控件-Recyc ...
- 《淘宝技术这十年》读书笔记 (二).Java时代的脱胎换骨和坚若磐石
马云说过"一个好的东西往往是是说不清楚的",姑且不论这句话的对与错.但我真的很佩服<淘宝技术这十年>这本书的作者子柳,能够通过淘宝的一些故事,按照时间顺序和IT发展的各 ...
最新文章
- iOS开发网络篇—多线程断点下载
- 搜索引擎优化(独立阐述)
- linux工作常用软件
- 如何建立自信心,不错!
- Heartbeat VIP/IP 与 别名/辅助IP
- COGS 36. 求和问题
- 动态代理,动态代理设计模式 ,JDK动态代理,cglib动态代理
- img 固定在父容器底部_容器苗容器怎么选?六种容器特点详解!
- CSS/CSS3常用样式与web移动端资源
- 汇编里的IMPORT和EXPORT
- kettle 参数传递_kettle 存储过程 参数传递参数
- 操作系统 - 沙箱(sandboxing)技术
- 超详细手把手教你App上线AppStore
- 使用java编写中国象棋(内含源代码)
- 《哈利波特》最低折扣
- Thunderbird – 开源免费跨平台邮箱客户端
- 垃圾分类回收APP开发解决方案
- 西安工大计算机学院李颖,李颖 -西安交通大学人文社会科学学院
- 连续8年 远见领跑|山石网科入选Gartner 2021网络防火墙魔力象限
- 平面设计技法技巧之图形设计