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;

引用

在声明引用变量时进行初始化,必须在创建时进行初始化;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值