关于c++的学习笔记(一)


一、C++特点

1.抽象
  一般来讲,对一个问题的抽象应该分为两个方面:数据抽象 和 行为抽象。前者描述某类对象的特性和状态,而后者则描述某类对象的功能或者行为特性。
2.封装
	封装就是将抽象得到的数据和行为(或者功能相结合,形成一个有机的整体,也就是 C++ 中的类(class),其中的数据和函数都是类的成员。
3.继承
	继承 的含义是,新建一个继承了原有类的新类,具有原有类的所有特征的同时,又具有自身的新特性。通过类的这种层次结构,可以很好地反映出特殊概念与一般概念的对应关系。通常我们把被其他类继承的类叫做父类或者基类,而继承自一个父类的类则称为子类或者派生类。
4.多态
	多态 则是面向对象程序设计,对于人类思维方式的一种直接模拟

二、基本组成

1.头文件
	1. iostream 输入输出流
	2.cmath 从c语言继承的函数库统一加上c
2.对象
3.命名空间
	1.using std::xxx
	2.using namespace std

三、函数

1.数学函数
	1.doublle ceil 上取整
	2.double floor 下取整
2.格式函数
	1.fixed 它表示浮点输出应该以固定点或小数点表示法显示
	2.setprecision(n) 使用setprecision(n)可控制输出流显示浮点数的数字个数。C++默认的流输出数值有效位是6。
	3.用法
		如果不用fixed可能会输出以科学计数法显示的数字
		注意:要有命名空间
		cout << fixed << setprecision(2) << bottom + high + c << endl;
3.传递
	1.值传递
	2.地址传递
	3.引用传递
4.参数
	有默认值的形参必须放在形参列表的最后,也就是说,在有默认值的形参右边,不能出现没有默认值的形参——在函数调用中,实参和形参是按照从左到右的顺序
	函数做参数,传地址
5.重载
	函数是否可以重载,与函数的返回值,以及形参的名称无关——如果函数名称和形参类型都相同的话,那么不管返回值是否相同,都会被编译器判定为语法错误(函数重复定义)
	注意避免二义性

四、数组

1.sprintf 
	输入到数组
2.scanf
	从数组输入
3.地址
	int *p; a[3][3]p = &a[0][0];cout << *(p + 3) << endl;cout << (a[1][0]) << endl;
4.数组也可以作为对象
	a[1].x
5.对象数组的初始化
	Point p[2] = {Point(1,2),Point(3,4)};//假设Point有对应的构造函数
6.字面量
	1.长类型(long)字面量,我们会加一个 l 或 L ,例如 1234L 。
	2.无符号字面量(unsigned)以字母 u 或 U 作为后缀,例如 345U 。
	3.后缀 f 或 F 则用于标记单精度浮点型(float)字面量,例如 3.14F或 1e-2f 。不增加后缀的浮点型字面量均为双精度浮点型(double)字面量。
	ulf可以一起使用
7.输入带空格的字符串
	cin.get(string,30)

五、类

1.定义
	将抽象之后的数据和函数封装在一起,就构成了 C++ 的类。
2.结构
	1.数据成员
	2.函数成员
		如果函数写到类的外面,要先在类里写声明。此外在函数名前加上类名::
3.函数
	1.构造函数
		1.函数名与类名完全相同
		2.不能定义返回值类型,也不能有 return 语句
		3.可以有形参,也可以没有形参,可以带有默认参数
		4.可以重载
		5.事实上,如果我们定义一个类的时候,不声明任何构造函数,那么编译器在编译的时候,就会为我们自动生成一个默认构造函数它的特点就是“什么都不做”,单纯只是创建一个类而已
	2.复制构造函数
		1.当用类的一个对象去初始化该类的另一个对象的时候
			Point a(1,2);
			Point b(a);//用对象a初始化对象b,复制构造函数被调用
			Point c = b;//用对象b给对象c赋值,复制构造函数被调用
		2.当函数的形参是类的对象,调用函数时进行形实结合的时候
		3.当函数的返回值是类的对象,函数执行完成返回调用者的时候
	3.析构函数
		与构造函数一样,析构函数通常也是类的一个公有函数成员,它的名称是由类名面加一个 ~ 构成,没有返回值也没有任何参数,但可以是虚函数。同样,如果我们自己不去定义的话,编译器也同样会自动生成一个隐含的析构函数——跟默认构造函数一样,这个隐含的析构函数什么都不会做。
4.初始化列表
5.作用域
	1.函数原型作用域
		在函数原型声明时形式参数的作用范围就是函数原型作用域 。
	2.局部作用域
		局部作用域主要指的是同一个函数体内(可以是主函数也可以是其他自定义的函数),使用大括号分割的不同代码块——在我们的日常开发过程中,较为常见的就是选择结构和循环结构的局部作用域。
	3.类作用域
		类作用域类可以被看做是一组有名字的成员的集合——具体地说,某一个类 Class 的成员 member 具有类作用域——对于 member 的访问,有以下几种方式
			如果在 class 的任意一个成员函数中,没有声明同名的局部作用域标识符,那么这个成员函数就可以直接访问成员 member 。也就是说member在类的成员函数中都起作用。
			通过表达式 object.member 或Class::member 来访问(其中 object 是 Class的一个实例对象),这正是程序中访问对象成员的最基本方法。其中 Class::member 的访问方式适用于类的静态成员
			通过 ptr->member 这样的表达式——其中 ptr 是指向 Class 的某个实例对象的指针。
	4.命名空间作用域
		一个命名空间自身即确定了一个作用域,凡是在该命名空间内声明的,不属于前面提到的各个作用域的标识符,都属于这个命名空间的作用域。在命名空间的内部,可以直接引用当前命名空间中声明的标识符——如果需要引用其他命名空间中的某个标识符的话,可以使用这样的语法
			using 命名空间::标识符名
			using namespace 命名空间
6.类的组合
	当我们创建一个组合类的实例对象的时候,不光是它自己的构造函数的函数体被调用执行,而且还将调用其内嵌对象的构造函数。这个时候,构造函数的调用顺序如下所示:
	1. 调用内嵌对象的构造函数,调用顺序按照内嵌对象在组合类中的定义中出现的顺序。需要注意的是,我们写在初始化列表中的内嵌对象顺序,跟内嵌对象构造函数的调用顺序是没有关系的。
	2. 执行本类构造函数的函数体。析构函数的调用执行顺序与构造函数正好相反 ,析构函数的函数体被执行完毕之后,内嵌对象的析构函数开始被一一执行——它们的调用顺序,跟它们在组合类的定义中的顺序正好相反。需要注意的是,因为需要调用内嵌对象的析构函数——所以,虽然有的时候我们并没有显式定义析构函数,但是编译器自己生成的析构函数,也并不是跟以前一样“什么都不做”
7.结构体
	结构体 是一种特殊形态的类——它和类的使用方法几乎完全一样。唯一的区别在于——在类中,如果你直接定义成员类型,不写访问控制属性,那么,成员变量 a,b 将会默认设置为私有成员。而结构体则相反
8.前项引用声明
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值