第三章,C++世界众生相

3.1C++中的数据类型

1.数据类型:int char

2.基本数据类型:

3.构造数据类型:

(1)C++的特殊机制:可以将多个基本数据类型组合起来,构成一个比较复杂的构造数据类型,可以描述更加复杂的事物

(2)example

//长方形数据集

struct Rect

{

int m_nLength;      //长

int m_nWidth;       //宽

}

4.构造的数据类型可以分解成若干个“成员”或“元素”。每个成员都是一个基本数据类型或另一个构造的数据类型。

5.C++构造数据集的4种数据类型:数组类型,结构类型,联合类型,枚举类型

3.2变量与常量

1.取值是否可以改变

2.量:整型常量,浮点常量,整型变量,浮点变量

3.2.1声明变量

1.结构形式:

(1)数据类型 变量名;

(2)数据类型 变量名1,变量名2,变量名3,变量名4;

注意:变量名字不可以有空格

3.2.2给变量取个好名字

1.基本原则:变量名=属性+类型+对象描述

2.简单易懂

3.最短长度,最大信息量

3.由名词构成

4.不使用数字编号

5.常量要大写

6.使用约定俗称的前缀:s_静态 g_全局变量 m_成员数量

3.2.3变量初始化

1.变量声明后 ----> 分配内存空间

(1)string strName("luotao");  //构造函数初始化

(2)声明后立即就到初始化

3.2.4常量

1.用来常量对变量赋值

2.整型常数:

(1):nhight = 174;    //十进制数

(2):nhight = 0255;   //八进制数

(3):nhight = 0xAD;   //十六进制数

3.浮点型常数:1.1e5;

4.字符常量:char aMake = 'A';    

   cout<<'!'<<endl;

\r回车

5.字符串常量:

3.2.5用宏与const关键字定义常量

1.预编译指令:#define 宏名称 宏值

#define PI 3.1415926

2.const 数据类型 常量名 = 常量值;//不能修改

3.3数值类型

3.3.1整型数值类型

1.基本型:int

2.短整型:short int

3.长整型:long int

4.长长整型:long long int

3.3.2浮点型数值类型

1.单精度型:float

2.双精度型:double

3.长双精度型:long double

3.4布尔型

1.自动转换为整型、

// learnerOne.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <iostream>

//引入输入/输出文件流对象需要的头文件

#include <fstream>

using namespace std;

bool isEven( int i )

{

//判断一个数是不是偶数

//如果是偶数,则返回true,否则返回false

return i % 2 == 0;

}        

int _tmain(int argc, _TCHAR* argv[])

{

//表示某个数是否是偶数

bool bEven;

//总的偶数个数

int nEvenCount = 0;

//统计范围

int nFrom = 0;

int nTo = 100;

//统计范围内的所有数

for( int i = nFrom; i <= nTo; i++ )

{

//调用isEven()函数判断当前数值

//如果是偶数,则返回true,否则返回false

bEven = isEven( i );

//将布尔类型变量和整型变量隐式的转换为整型对象

//如果bEven的值是true,表示这是一个偶数,相应的统计数加1

nEvenCount += bEven;

}

//输入结果

cout<<nFrom<<"到"<<nTo<<"之间的偶数个数为:"<<nEvenCount<<endl;

return 0;

}

3.5字符串类型

3.5.1字符类型

1.字符类型的类型说明符“char”

2.是无符号类型

3.char取值范围有限,只能用来表示有限的ANSI字符

4.为了表示UNICODE字符,采用wchar_t来定义

// LearnTwo.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

//定义一个wcahr_t类型的字符变量

//并用一个中文字符对其进行赋值

wchar_t cChinese = L'中';

//设置wcout输出对象并输入中文字符

wcout.imbue( locale ( "chs" ) );

wcout<<cChinese<<endl;

return 0;

}

3.5.2字符串类型

1.需要使用imbue()设定字符的编码方式

// Learn3.5.2.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <iostream>

#include <string>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

//定义一个string类型变量,表示英文字符串

string strMorning("Good Morning");

//定义一个wstring类型变量,表示中文字符串

wstring strChina(L"中国");

//输出字符串变量

cout<<strMorning;

wcout.imbue( locale ("chs") );

wcout<<strChina<<endl;

return 0;

}

2.字符串中查找某个字符

// learn3.5.2.1.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <iostream>

#include <string>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

string strMorning("Good Morning!");

//通过length()函数得到字符串的长度

int nLength = strMorning.length();

//在字符串中查找字符

string::size_type nPos = strMorning.find('o');

//输出结果

cout<<strMorning<<"的长度是:"<<nLength<<"\n在位置"<<nPos<<"有一个字符o。"<<endl;

return 0;

}

3.6数组

-----> 排列数据

3.6.1数组的声明与初始化

1.申明格式:
(1):数据类型 数组名[个数常量][个数常量][个数常量]…….

(2):“[]”用于确定数组的维数

(3):数组名就是数组标识符

(4):数组名也是一个常量,也可以表明数组的首地址

3.6.2数组的使用

1.引用数组中的数据  ---> 下标

2.数据内存的分类:高维数优先排列---->下标从高到低

3.7枚举类型

1.枚举地址:定义一种新的数据类型,列举它所有的可能值。

当使用这种新的数据类型定义一个变量时,这个变量的取值也就限定在了枚举所列举的可能取值范围内

2.  enum 枚举类型名

{

//可能的枚举值列表

};

3.示例:

// learn3.6.1.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

enum Weekday

{

mon,

tue,

wed,

thu,

fri,

sat,

sun

};

//定义一个变量表示一周中的某一天

//并将其初始值设置为星期天

Weekday nDay = Weekday::sun;

return 0;

}

4.枚举类型有默认值:
(1):枚举类型实质是一个整数值

由于Weekday::sum默认值为6

5.枚举变量类型的赋值:如果变量是枚举类型,就只能使用这种枚举类型的某个可选值对其进行赋值

//定义一个枚举类型的变量

Weekday nDay;

//用枚举类型的可选值对枚举类型变量进行复制

nDay = Weekday::sum;

//尝试用其它数值对枚举类型变量赋值会产生编译错误

nDay = 7;

6.枚举元素的数值是常量,定义后不可改变

Weekday::mon = (Weekday)0;    //尝试改变枚举元素的值,导致编译错误

在定义枚举类型时,就已经完成了枚举元素数值的定义,数值不是默认数值就是给定的特殊数值。

枚举类型定义后不能在改变其中某个元素的值

3.8用结构体类型描述复杂的事物

概述

1.数据类型描述事物的单个属性

2.单个属性的基本数据类型组合

3.8.1结构体的定义

1.Struct 结构体名

{

数据类型1 成员名1;

数据类型2 成员名2;

数据类型3 成员名3;

}

2.结构体名就是要创建新结构体的名字;

3.多个不同数据类型的变量表示复杂事物的各个属性

4.这些变量称为结构体的成员变量

//定义结构体Human描述人这个复杂事物

struct Human

{

string m_strName;     // 姓名

Bool m_bMale;               //性别

int m_nAge;             //年龄

int m_nHeight;        //身高

}

3.8.2结构体的使用

1.引用结构体变量的形式:

  结构体变量.成员变量

// learn3.8.2.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <iostream>

#include <string>

using namespace std;

//将员工这个复杂事物的多个属性打包成一个结构体

int _tmain(int argc, _TCHAR* argv[])

{

struct Emplyee

{

string m_strName;                //姓名

bool m_bMale;                        //性别

int m_nAge;                                //年龄

int m_nSalary;                        //工资

};

//定义一个常量表示最大员工数目

const int MAX_COUNT = 1000;

//创建一个结构体数组,管理多个结构体变量

Emplyee arrEmplyee[MAX_COUNT];

cout<<"请输入员工信息"<<endl;

//当前员工数

int nCount = 0;

do

{

//接受用户输入

//将用户输入的数据保存到结构体变量的各个成员变量

cin.clear();

cin>>arrEmplyee[nCount].m_strName

>>arrEmplyee[nCount].m_bMale

>>arrEmplyee[nCount].m_nAge

>>arrEmplyee[nCount].m_nSalary;

//检查是否输入完毕

if ( "end" == arrEmplyee[nCount].m_strName)

break;

//开始输入下一个员工的信息

++nCount;

}while( nCount < MAX_COUNT );

//显示所有员工的信息

cout<<"员工信息:\n 姓名\t性别\t年龄\t工资"<<endl;

for( int i = 0; i < nCount; ++i)

{

//访问数组的中的结构体变量的成员变量

//获取"员工"这个复杂事物的各种属性

cout<<arrEmplyee[i].m_strName<<"\t"

<<arrEmplyee[i].m_bMale<<"\t"

<<arrEmplyee[i].m_nAge<<"\t"

<<arrEmplyee[i].m_nSalary<<endl;

}

return 0;

}

3.9指向内存位置的指针

------->  访问内存的方法

3.9.1指针就是表示内存地址的数据类型

1.指针,是一种表示内存地址的数据类型,表示的是内存的地址。

2.访问内存的方式:

(1)通过变量名间接反映

(2)直接通过内存地址,指针来访问内存的数据

3.指针变量所保存的是一个对象或者函数的地址,就说这个指针指向这个对象或者函数。

3.9.2指针变量的定义

1.语法格式:

数据类型* 变量名

2.数据的类型可以是:int double string

3.(1):数据类型即为指针变量

  (2):“*”表示声明的是一个指针类型的变量

  (3):“变量名”就是给这个指针指定的名字

4.

//一个int型指针,它可以指向一个int型数据

int* pnStudentNumber;

//一个double型指针,它可以指向一个double型数据

double*  pnStudentNumber;

//一个Emplyee型指针,它可以指向一个Emplyee型数据

double*  pnStudentNumber;

5.选择合适的定义指针变量的方式

int* pnStudentNumber;                 //(1)

int *pnStudentNumber;                //(2)

含义相同,对读者所强调的意义不同

(1)强调的是pnStudentNumber为一个指向整数的指针,可以把int*看作一种数据类型,而整个语句强调的是pnStudentNumber为这种数据类型的一个变量;

(2)是把*pnStudentNumber当成一个整体,表示它的数据类型是整型,而pnStudentNumber是指向这个整数的指针。

3.9.3指针的赋值和使用

1.语句格式:

指针变量 = 内存地址;

2.与地址相关的运算符:“&”,“*”

3.“&”取址运算符:

//定义一个整型变量

int N = 703;

//取得整型变量的地址并将其赋值给整型指针

int* pN = &N;

4."*"运算符:称为解析运算符,与取址运算符为反运算

//通过指针修改它所指向的数据

*pn = 1983;

//通过指针读取它所指向的数据

cout<<*pn<<endl;

5.例子:

//定义一个结构变量

Emplyee Jiawei;

//定义一个指针

Emplyee* pJiawei = &Jiawei;

//用“->”运算符,访问这个结构体变量的成员变量

pJiawei->m_strName = "Jiawei";

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值