C++学习 18-11-20

1.增强的for循环

1.在C++中,可以在任意一个位置声明变量

for(int i=0; i<10; i++)
{
	cout << i << endl;
}

2.范围 for循环

在C++中会有一种类似于python中迭代器的操作,类似以下的循环:

int arr[5] = {1, 2, 3, 4, 5};
for (int value:arr)
{
	cout << value << endl;
}

结果:1 2 3 4 5
注意:这种操作只能遍历一个静态数组。

2.auto类型

auto类型是一种可以自动识别变量类型的类型。
比如上例中的 int value 可以替换为 auto value 仍可以正常运行。

int arr[5] = {1, 2, 3, 4, 5};
for (auto value:arr)				// auto 可以自动识别arr的元素类型为int
{
	cout << value << endl;
}

3.bool类型

在C++中,提供 bool 类型的数据类型,值为 truefalse,其大小为 1 个字节;
相对来说,在头文件 windows.h 中有一种类型 BOOL ,实际上是 int 的 typedef,其值为 TRUEFALSE,大小是 4 个字节(原因是BOOL实际上是int类型,因此大小与int类型一致)。

bool is_or_not = true;
cout << sizeof(is_or_not) << endl;

#include<windows.h>
BOOL Is_Or_Not = TRUE;
cout << sizeof(Is_Or_Not) << endl;

4.函数默认参数

1.有关函数默认参数的知识先前已经进行过学习,本次进行复习。

首先,函数参数的默认值是由右向左进行赋予默认值的,原因在于如果从左向右进行默认值的赋予,倘若有4个参数,而默认值给定了3个,则意味着最后一个参数没有默认值,当进行函数调用的时候,需要赋予参数,此时只赋1个值会报错(只赋一个值表示理解为前三个有默认值,只需赋最后一个参数的值);全赋上值则可以正确调用,但是此时默认值无意义,因为只有全赋值的情况下函数可以调用;从右向左进行赋予默认值的话,倘若有4个参数,而默认值给定了2个,则当调用函数而只给定两个参数时,可以将这两个参数赋值给前两个没有默认值的参数。

2.默认值在声明函数的时候给出。

void ShowSLAM(int param1, int param2, int param3 = 4, int param4 = 5);

int main()
{
	...
}

void ShowSLAM(int param1, int param2, int param3, int param4)
{
	...
}

5.函数重载

定义:函数重载的意思就是 **在同一个作用域,具有相同的函数名的函数所具有的参数不同(参数的类型不同或参数的个数不同)。
下面以一个简单的例子来进行解释说明:

// 例1.求圆的面积
void Area(int r)
{
	cout << r*r*3.14 << endl;
	return;
}

// 例2.求长方形的面积
void Area(int l, int h)
{
	cout << l*h << endl;
	return;
}

// 例3.输出字符串
void Area(char *str)
{
	cout << str << endl;
	return;
}

当我们调用这三个函数时,根据所输入的参数的类型、参数的个数会调用不同的函数。

6.const常量

复习:
例1. const int *p;
此时,*p无法进行修改而 p 可以进行修改。

7.string 头文件

在C++中,有一种新的类型用来保存字符串,类型关键字:string。

#include<iostream>
#include<string>

using namespace std;

int main()
{
	char *str1 = "alksdjflakjdf";
	char *str2;								
	str2 = "jsaldfkjalskdfj";					// 
	string str3;
	str3 = "saldfjaljdf";
}

可以对 string 声明的变量进行 +、= 操作。

  • 操作用来对字符串进行拼接;
    == 操作用来对字符串进行比较是否相等(相等返回1,不相等返回0)。
string str1, str2;
str1 = "Hello SLAM";
str2 = "Hello slam";
cout << str1 == str2 << endl;
str1 += " I can't understand it";
cout << str1 << endl;

8.引用

1.引用运算符

&

2.引用的概念

引用就是给变量起别名(不同于typedef)

3.作用

引用可以使程序在不同作用域使用同一个变量。

4.注意

注意: 引用定义了之后需要初始化

5.与指针的区别

1.引用定义了之后需要进行初始化
2.引用初始化后就不能再重新引用其他空间
3.有空的指针,但是没有空的引用,引用要引用一个合法的存储单元,可以 const int& a = 123。

6.优点

安全,只能操纵一块空间

7.

引用是C++语言中的一个特殊的数据类型描述,用于在程序的不同部分使用两个以上的变量名指向同一地址。

int a = 100;
int& b = a;		// 引用
b++;			// 对引用操作,实际上就是对原数操作
cout << a << endl;

注意 :引用一旦被初始化,就不能再重新引用其他空间!!!

8.总结

& 符号的三种用法:
1.取地址符
2.按位与
3.引用

9.编写一个交换两个输入参数的函数

// 使用引用的方法
void Swap(int& num1, int& num2)
{
	int temp = num1;
	num1 = num2;
	num2 = temp;

	return;
}

// 使用指针的方法
void Swap(int* num1, int* num2)
{
	int temp = *num1;
	*num1 = *num2;
	*num2 = temp;

	return;
}

10.函数参数的传递方式

1.值传递
2.地址传递
3.引用传递

11.选择函数参数的传递方式

1.是否需要修改传入的内容,若修改,使用地址或引用传递;不修改,使用值传递;
2.在C++中不建议使用值传递;
3.地址传递和引用传递的区分方法:看传入的是不是new出来的空间,若是,则使用指针传递

9.面向对象(Object Oriented Programming)

1.有类和对象之分

类指的是模版,对象是真实存在的实体。

定义一个类:

class CPerson
{
	...	
};

类似于C语言中的 struct ,一般以C开头作为类名。

2.访问修饰符

1.public:在任何一个地方都可以见到
2.protected:在自己和派生类中可以见到
3.private:只有自己可以见到;若成员属性没有访问修饰符,则默认为 private。

3.类中包括

1.成员属性:
2.成员函数(方法):类内定义的方法,一般来说,成员函数是public的。

猜你喜欢

转载自blog.csdn.net/weixin_42896619/article/details/84338404