c++学习笔记

C++的对象

c++是混合型语言

C++程序以.cpp作为文件扩展名,并且有一个且只能有一个名为main的主函数。真正的面向对象语言没有主函数,C++保留了这个面向过程的主函数,所以称之为混合型语言。

注释方式

C++除了沿用C语言的从“/”开始、直到“/”结束的注释方式,引入了更灵活的“//”,注释的有效范围从“//”至本行结束。

输入/输出对象

iostream.h是I/O流的标准头文件。C++预定义了四个流:cin,cout,ceerror,clog。这四个流与四个具体的输入/输出设备相连接,具体的连接设备如下。
cin:与标准输入设备相连接。
cout:与标准输出设备相连接。
ceer:与标准错误输出设备相连接(非缓冲方式)。
clog:与标准错误输出设备相连接(缓冲方式)。
当程序需要执行键盘输入时,可以使用提取操作符“>>”,从cin输入流中提取字符。当程序需要在屏幕上显示输出时,可以使用插入操作符“<<"向cout输出流中插入字符。

使用命名空间

使用命名空间的语句是using namespace std;。所谓命名空间是一种程序名称封装起来的方法,它提高了程序的性能和可靠性。

函数原型及其返回值

返回值是由return后面的表达式决定的,且表达式的值与声明函数的类型一致。如果函数确实不需要返回值,可以用void标识,一旦使用void标识,函数体内就不再使用return语句。

const修饰符

在c++中,建议使用const代替宏定义,用其修饰的标识符是一类特殊的常量,成为符号常量。

预编译指令

#define宏定义与#undef指令。
#include指令:文件包含,作用是在系统编译之前,将包含文件中的内容复制到当前文件的当前位置之后,再进行编译。
#if #endif 和#if #else #endif等指令。

c++标识符

c++标识符以大小写字母或下划线开始,由大小写字母、下划线、数字组成。

数据类型

void C++增加的数据类型,无类型标识符,只能声明函数的返回值类型,不能声明变量。
整型常量,实型常量,字符常量。整型常量,十进制,八进制,十六进制。
后缀表示常量的类型,如F,f,L,l。

c++预处理指令

使用尖括号是引用系统提供给的包含文件,使用引号是引用自己定义的包含文件;使用尖括号是首先在系统设定的目录中寻找包含文件,如果没有找到,到指定目录中寻找;使用引号是通知C++编译器在用户当前目录或指定目录下寻找包含文件,指定目录不必在同一逻辑盘中。

函数重载

c++允许为同一个函数定义几个版本,从而使一个函数名具有多种功能,这称为函数重载。

c++动态内存分配

在使用指针时,如果不使用对象地址初始化指针,用户可以自己给他分配地址,申请方式如下:
new 类型名[size] //申请可以存储size个该数据类型的对象不再使用时,使用“delete指针名”即可释放已经申请的存储空间。

c++引用

引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
引用实际上就是变量的别名。

泛型算法应用于普通数组

数组不能作为整体输出,引入STL库提供的泛型算法,则可以大大简化数组操作。要输出数组内容,对数组进行升幂排序、反转数组的内容、赋值数组的内容等操作,需要包含头文件,reverse(a,a+len)是将数组元素反转排序;copy(a,a+len,b)是将数组a的内容原样复制到数组b;sort(a,a+len)默认排序方式是升幂排序;find(a,a+len,value)查找数组a的内容是否存在值为value的元素。

c++输入/输出操控符及其含义

控制方式有两种:ios_base提供的接口、操作符的特殊函数。
long flags(long newflag):返回格式标志位newflag,返回旧的格式标志。
long setf(long bits):设置指定的格式标志位,返回旧的格式标志。
int width():只返回当前域宽,缺者宽度为0.这时插入操作能按表示数据的最小宽度显示。
int precision(int val):设置精确度为val,控制输出浮点数的有效位,返回旧值。
hex:设置转换基数为十六进制;
oct:设置转换基数为八进制;
ws:提取空白字符。
ensd:输出一个null字符。
flush:刷新流。
resetiosflags(long):清除特定的格式标志位。
setiosflags(long):设置特定的格式标志位。
dec:设置转换基数为十进制。
endl:输出一个换行符并刷新流。
setw:设置输出数据字段宽度width。

程序的编辑、编译、运行的基本概念

源文件中包含头文件的预编译语句,经编译后,产生编译单元,以临时文件形式存放于计算机之中。之后进行编译,进行语法检查,产生目标文件(*.obj)。此工程中的所有目标文件经过连续,产生可执行文件。连续包含c++的库函数和标准类库的连接。

结构到类的演变

结构的演变

结构的定义格式如下:
struct结构名{
数据成员;
成员函数;
};
关键字class代替struct,就是一个标准的类。

面向过程与面向对象

所谓面向过程,是指不必了解计算机的内部逻辑,而是把精力主要集中在对如何求解问题的算法逻辑和过程的描述上,通过编写程序把解决问题的步骤告诉计算机。这种算法的特点是按部就班的求解,而且条理清晰易懂。但是也会存在以下问题:要求开发人员按计算机的结构思考,而不是按要求解决问题的结构去思考。开发人员必须在机器模型和实际问题模型之间进行对应。

面向对象程序设计的特点

面向对象程序设计具有抽象、封装、继承、多态性等关键要素。对象可以表示世界中任何一个实体,对象是用来描述客观事物的一个实体;对象是c++系统中的一个基本单位;对象由一组属性和对该属性进行操作的成员函数组成。

类和对象

c++使用对象名、属性、操作三个要素描述对象。类是具有相同属性的操作的一组对象的集合,其内部包括属性和操作两个主要部分,类的作用是定义对象。
类给出属于该类的全部对象的抽象定义,而对象则是符合这种定义的实体,所以讲对象称为类的一个实例。

抽象和类

所谓一个类的所有对象具有相同的属性,是指属性的个数、名称、数据类型相同,各个对象的属性值可以互不相同并可随着程序的执行而变化。

封装

按照面向对象的封装原则,一个对象的属性和操作紧密结合,对象的属性只能由这个对象的操作来存取,所以封装要求一个对象应具备明确的功能,并且具有接口以便和其他对象相互作用。

继承

继承是一个类可以获得另一个类的特性的机制,继承支持层次的概念。

多态性

不同的对象可以调用相同名称的函数,但可导致完全不同的行为的现象称为多态性。

使用string对象

使用string对象,必须包含这个类的头文件string.h,即#include<string.h>。对象使用自己成员函数的方法是:对象名.成员函数。常用的函数如下:
size()计算机字符串的长度;
substr()用来返回字符串的字串;
find()用来在主串中检索所需字符串,找到返回所在位置,找不到返回-1;
string类有一对用来指示其元素位置的基本成员函数;指示第一个元素的begin和指示最后一个元素之后的字符串结束标记endl。

使用complex复数对象

complex<数据类型>对象名(实部值,虚部值);
complex的real和image成员函数用来输出对象的实部和虚部的值。

函数和函数模板

函数的参数及其传递方式

在设计函数参数时,可以使用“对象”“对象指针”“对象引用”作为参数。将对象作为函数参数,是将实参对象的值传递给形参对象,不会影响原来实参的值。

对象作为函数参数

将对象作为函数参数,是将实参对象的值传递给形参对象,这种传递是单向的。形参拥有实参的备份,当在函数中改变形参时,改变的是这个备份中的值,不会影响原来实参的值。

对象指针作为函数参数

使用对象指针作为函数参数,形参是对象指针,实参是地址值,所以改变形参值时,会改变原来的实参值。使用引用作为函数参数,实参和形参对象代表同一对象,所以改变形参对象的值就是改变实参对象的值。用const修饰传递参数,意思是通知函数,它只能使用参数而无权修改它。

引用作为函数参数

形参是对象的引用,实参是对象,实参和形参对象代表一个对象,所以改变形参对象的值就是改变实参的值。

函数的返回值

返回值类型可以除数组和函数以外的任何类型。当函数返回值是指针或引用对象时,需要注意的是,函数返回值所指的对象必须继续存在,因此不能将函数内部的局部对象作为函数的返回值。
(1)返回引用的函数:
数据类型&函数名(参数列表);
(2)返回指针的函数:
类型标识符*函数名(参数列表);
(3)返回对象的函数:
例如:声明int max(int,int);
调用string str=input(n);
(4)函数返回值作为函数的参数:
例如:声明int max(int,int);
调用:cout<<max(55,max(25,39))<<endl;

内联函数

定义内联函数使用关键字inline。在C++中,除具有循环语句、switch语句的函数不能说明为内联函数外,其他函数都可以说明为内联函数。
内联函数能加快程序的执行速度,但如果函数体语句过多,则会增加程序代码的大小。由于编译器必须知道内联函数的函数体,才能进行内敛替换,因此,内联函数必须在程序中第一次调用此函数的语句出现之前定义。

函数重载

不同对象调用函数名具有多种功能,称这种特征为多态性。分为静态多态性和动态多态性。函数的重载是静态多态性。

函数模板

将函数模板与某个具体数据类型连用,就产生了模板函数。
函数模板定义:
函数模板名<模板参数>(参数列表);
默认形式:
函数模板名(参数列表);
c++还专门定义一个仅仅用在模板中的关键字typename,它的用途之一是代替template参数列表中的关键字class。

类和对象

定义类

类要先声明后使用;不管声明的内容是否相同,声明名字相同的两个类是错误的,因为类具有唯一标识符的实体。
声明类class类名{
private:私有数据和函数;
public:公有数据和函数;
protected:保护数据和函数;
}
类中声明的变量属于该类;类中定义的数据和函数,如果没有关键字,则成员默认为private权限;public、protected、private这些关键字使用的顺序和次数是任意的;声明类同时,在类体内给出成员函数的定义,默认为内联函数。不可以在类体内给数据成员赋值,只有产生一个具体对象时,这些数据才有意义。

定义成员函数

类中声明的成员函数用来对数据成员进行操作,还必须在程序中实现这些成员函数。定义成员函数的一般形式如下:
返回类型类名::成员函数名(参数列表)
{
成员函数的函数体//内部实现
}

数据成员的赋值

不能在类体内给数据成员赋值,当然在类外面更不允许了。数据成员的具体值是用来描述对象的属性的,只有产生一个具体的对象,这些数据才更有意义。

使用类的对象

(1)类的成员函数可以直接使用自己类的私有成员。
(2)类外面的函数不能直接访问类的私有成员。
(3)类外面的函数只能通过类的对象使用该类的公有成员函数。
(4)对象A和B的成员函数的代码一样,A和B两个对象的区别是属性的取值。

对象指针

定义对象指针的语法如下:
类名对象指针名;
对象指针名=对象的地址;
也可以直接进行初始化。例如:
类名
对象指针名=对象的地址;
类对象的指针可以通过“->”运算符访问对象的成员,即:
对象指针名->对象成员名

数据封装

c++通过类实现数据封装,即通过指定各成员的访问权限来实现。一般情况下将数据成员说明为私有的,以便隐藏数据。而将部分成员函数说明为公有的,用于提供外界和这个类的对象相互作用的接口,从而使得其他函数可以访问和处理该类的对象。

构造函数的特性

对象用来设置初值的函数。
构造函数的特征如下。
(1)构造函数的名称与类名称相同且可以由用户自行定义。
(2)构造函数不能有返回值,也不能声明返回类型。
(3)构造函数有多个,即构造函数重载。
(4)构造函数建立对象时自动被调用。
(5)没有参数的构造函数称为默认构造函数。没有定义构造函数时,自动产生默认构造函数。
(6)构造函数也受数据封装限制而有数据隐藏的特性。
(7)构造函数和运算。。。。。。。。。。。。。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

致力于1亿人体验MR

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

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

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

打赏作者

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

抵扣说明:

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

余额充值