C++预备知识

C++预备知识

一、简介

C++融合了3种不同的编程方式,C语言代表的过程性语言、C++在C语言基础上添加的类代表的面向对象语言、C++模板支持的泛型编程。

C++与C语言一样都是起源于贝尔实验室,于20世纪80年代被创造出来。

二、头文件

头文件类型约定示例说明
C++旧式风格以.h结尾iostream.hC++程序可以使用
C旧式风格以.h结尾math.hC、C++程序可以使用
C++新风格没有扩展名iostreamC++程序可以1使用,使用namespace std
转换后的C加上前缀c,没有扩展名cmatchC++程序可以使用,可以使用而不是C的特性,如namespace std

三、处理数据

面向对象编程(OOP)的本质是设计并扩展自己的数据类型。

宽字符类型

wchar_t bob = L'P';
wcout << L"tall" << endl;

char16_t 和 char32_t

char16_t ch1 = u'q';
char32_t ch2 = u'\U0000222B';

C++类型转换

int(a)

R"+* 字符串+*"

cout << R"+*("Who wouldn't?)",she whispere.)+*" << endl;

四、符合类型

结构体可以省略struct

struct inflatable
{
	char name[20];
    float volume;
    double price;
};

inflatable hat;

结构体和共用体:

struct widget
{
    char brand[200];
    int type;
    union id
    {
        long id_num;
        char id_char[20];
    }id_val;
};
...
widget prize;
...
if(prize.type == 1)
    cin >> prize.id_val.id_num;
else
    cin >> prize.id_val.id_char;

由于公用体是匿名的,因此id_num和id_char被视为prize的两个成员。他们的地址相同

struct widget
{
    char brand[200];
    int type;
    union
    {
        long id_num;
        char id_char[20];
    }id_val;
};
...
widget prize;
...
if(prize.type == 1)
    cin >> prize.id_num;
else
    cin >> prize.id_char;

枚举类型

enum spectrum {red, orange, yellow, green, blue, violet, indigo, ultraviolet};
spectrum band;
band = spectrum(3);

枚举的取值范围:

上限:假设最大的值是101。在2的幂中,比这个数的的最小值是128,因此取值范围上限为:127;

下限:如果不小于0,则下限是0

​ 如果最小值是-6,而比他小的2的幂是-8,因此下限为-7;

五、指针和自由空间

计算机程序在存储数据时必须跟踪的3种基本属性:信息存储在何处、存储的值为多少、存储的信息是什么类型。

在编译时给数组分配内存被称为静态联编。但使用new时,如果在运行阶段需要创建数组,则创建他,如果不需要则不创建。这被称为动态联编。

new和delete

  • 不要使用delete来释放不是new分配的内存。
  • 不要使用delete释放同一个内存块两次。
  • 如果使用new[]为数组分配内存,应使用delete[]来释放。
  • 如果使用new为一个专门的实体分配内存,应使用delete(没有方括号)来释放。
  • 对空指针应用delete是安全的。

数组名和指针的区别

可以修改指针的值,但是能修改数组名的值,数组名是常量。

对数组名应用sizeof运算符得到的是数组长度,对指针应用sizeof得到的是指针的长度。

六、数组的地址

对数组名取地址时。数组名也不会被解释为其地址。数组名被解释为第一个元素的地址,而对对数组名取地址得到的时整个数组的地址

short tell[10];
cout << tell << endl;		// displays &tell[0]
cout << &tell << endl;		// displays address of whole array

从数字上说,这两个地址相同;但从概念上说,&tell[0](即tell)是一个2个字节的地址,而&tell是一个20字节的内存块的地址。因此,表达式tell+1将地址加2,而表达式&tell+1将地址加20。换句话说,tell是一个short指针(*short),而&tell是这样一个指针,即指向包含着20个元素的short数组(short(*)20)。

一般情况,如果给cout提供一个指针,将打印他的地址。但是如果指针的类型为char*,则cout将显示指向的字符串。如果想要显示字符串的地址,则必须见这种指针转换为另一种指针类型,如int*。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

去留意

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值