c++ primer学习笔记,一:入门

本文介绍了C++的基础知识,包括为何选择学习C++及其在安卓底层开发中的应用。文章详细探讨了开发环境的搭建,从输入输出操作讲起,逐步深入到基本内置类型、变量初始化等概念,并通过实例演示了如何编写简单的程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么学习C++:

1、为了弄懂android底层,以及NDK开发

2、增长视野

开发环境搭建:

对比开发工具VS2005和eclipse+cdt+MinGW,发现最新版的eclipse太强了,都自动集成了,编译运行和VS2005一样方便。

写个helloworld测试发现,在eclipse上,C代码可运行,但C++说没有找到libgcc_s_dw2-1.dll,将MinGW的bin目录加入到环境变量中,问题解决!

学习概要:

第一章

初窥输入/输出

C++的输入输出-------------标准库<iostream>----------cin、coutcerrclog

类简介

引入头文件 系统-----<>,自定义----""

#include<standard_header>

#include"my_file.h"

第二章

基本内置类型

C++标准规定了每个算术类型的最小存储空间,但它并不阻止编译器使用更大的存储空间。

boolean char wchar_t short int long float double longdouble

1)表示整数、字符和布尔值的算术类型合称为整型

2)wchar_t类型用于扩展字符集,比如汉字和日语。

字面值常量

1)在字符、字符串字面值前加L就能够得到wchar_t类型的宽字符字面值。如:L'a'、L"awidestringliteral"

2)为了兼容C语言,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符。。

3)两个相邻的仅由空格、制表符或换行符分开的字符串字面值(或宽字符串字面值),可连接成一个新字符串字面值。如

std::cout<<"amulti-line"

"stringliteral"<<std::endl;

4)如果连接字符串字面值和宽字符串字面值,将会出现什么结果呢?其结果是未定义的!!!

5)句尾“\”,就是把下行挪上来。

变量

变量的两种初始化:复制初始化和直接初始化

intival(1024);//direct-initialization

intival=1024;//copy-initialization

声明与定义

externinti;//声明可多次;声明仅说明变量在其他地方定义,不会分配存储空间;

inti;//定义只能一次;

通常把一个对象定义在它首次使用的地方是一个很好的办法。

Const标识符

connst修饰符-----不可修改,定义时必须初始化,比如:

conststd::stringhi="hello!";//ok:initialized

constinti,j=0;//error:iisuninitializedconst

const变量默认为extern。要使const变量能够在其他的文件中访问,必须地指定它为extern。比如:

externconstintbufSize=1;//可被其他文件访问,其他文件中:externconstintbufSize;

constintbufSize=1;//不能被其他文件访问

引用

在变量名前添加“&”符号来定义

每一种引用类型都关联到某一其他类型。但不能定义引用类型的引用。

intival=1024;

int&refVal=ival;//ok:refValreferstoival

int&refVal2;//error:areferencemustbeinitialized

int&refVal3=10;//error:initializermustbeanobject

引用仅是对象的一个别名

const引用,指向const对象的引用

constintival=1024;

constint&refVal=ival;//ok:bothreferenceandobjectareconst

int&ref2=ival;//error:nonconstreferencetoaconstobject

typedef名字

定义类型同义词

typedefdoublewages;//wagesisasynonymfordouble

typedefwagessalary;//indirectsynonymfordouble

typedef通常被用于以下三种目的:

为了隐藏特定类型的实现,强调使用类型的目的。

简化复杂的类型定义,使其更易理解。

允许一种类型用于多个目的,同时使得每次使用该类型的目的明确。

枚举

枚举比常量的好处

说明了一组常量是相关的,并且可以给这组常量一些实用方法。定义一个:

//inputis0,outputis1,andappendis2

enumopen_modes{input,output,append};

枚举的赋值操作:

Pointspt3d=point3d;//ok:point3disaPointsenumerator

Pointspt2w=3;//error:pt2winitializedwithint

pt2w=polygon;//error:polygonisnotaPointsenumerator

pt2w=pt3d;//ok:bothareobjectsofPointsenumtype

注意把3赋给Points对象是非法的,即使3与一个Points枚举成员相关联。

类类型

定义类时,通常先定义该类的接口,即该类所提供的操作。通过这些操作,可以决定该类完成其功能所需要的数据,以及是否需要定义一些函数来支持该类的实现。

定义类:

classSales_item{

public: //operationsonSales_itemobjectswillgohere

private:

std::stringisbn;

unsignedunits_sold;

doublerevenue;

};

和java很不一样的是:class的花括号后还有“;”。

使用struct关键字

C++支持另一个关键字struct,它也可以定义类类型。struct关键字是从C语言中继承过来的。

不同的是:第一个访问标号前的成员访问等级。class-----private;struct--------public

编写头文件

头文件用于声明而非定义

因为头文件包含在多个源文件中,所以不应该含有变量或函数的定义。但有三个例外:

头文件可以定义类、值在编译时就已知道的const对象和inline函数

如果const变量不是用常量表达式初始化,则该const变量应该在一个源文件中定义并初始化。应在头文件中为它添加extern声明,以使其能被多个文件共享。

预编译器

包含同一头文件不会引起该头文件定义的类和对象被多次定义,则通常为:头文件保护符

避免多重包含

预处理器允许我们自定义变量。

预处理器变量的名字在程序中必须是唯一的。任何与预处理器变量相匹配的名字的使用都关联到该预处理器变量。为了避免名字冲突,预处理器变量经常用全大写字母表示。

#define指示接受一个名字并定义该名字为预处理器变量

#ifndef指示检测指定的预处理器变量是否未定义。如果预处理器变量未定义,那么跟在其后的所有指示都被处理,直到出现#endif。如

#ifndefSALESITEM_H

#defineSALESITEM_H //DefinitionofSales_itemclassandrelatedfunctionsgoeshere

#endif

头文件应该含有保护符,即使这些头文件不会被其他头文件包含。编写头文件保护符并不困难,而且如果头文件被包含多次,它可以避免难以理解的编译错误


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值