C入门C++ 基础笔记

Posted jia-huan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C入门C++ 基础笔记相关的知识,希望对你有一定的参考价值。

头文件

C++ 头文件不必是 .h 结尾,C语言中的标准库头文件如 math.h, stdio.h,这两个头文件在C++中被命名为 cmath, cstdio 。

#include <cmath>
#include <cstdio>

int main()
	...

注释

多行注释 & 单行注释

/*
	C的多行注释
	用于注释一整块代码
*/
#include <cmath>
#include <cstdio>

int main()   //程序执行入口
	double a = 1.2;   // 定义一个变量a
	a = sin(a);
	printf("%lf\\n", a);  // 打印
	return 0;

名字空间(关键字:namespace)

为防止名字冲突(出现同名变量),C++引入了名字空间(namespace)
通过 :: 运算符限定某个名字所属的名字空间

#include <cstdio>

namespace first
	int a;
	void f()/* ... */
	int g()/* ... */


namespace second
	double a;
	double f()/* ... */
	char g;


int main()
	first::a = 2;
	second::a = 6.22;
	first::a = first::g() + second::f();
	second::a = first::g() + 6.333;
	
	return 0;

通常有3种方法使用名字空间X的名字name:
1)引入整个名字空间
using namespace X;
2)使用单个名字
using X::name;
3)程序中使用名字时带上空间名
X::name

输入输出

C++的新的输入输出流库(头文件iostream)将输入输出看成一个流,并用输出运算符 << 和输入运算符 >> 对数据(变量和常量)进行输入输出;其中有:
cout 代表标准输出流对象(屏幕窗口)
cin 代表标准输入流对象(键盘);
标准库中的名字都属于标准名字空间 std;

#include <iostream>
#include <cmath>
using std::cout;// 使用单个名字

int main()
	double a;
	//cout << "从键盘输入一个数"; 这行代码的返回值依然是 cout,所以才可以有下面的代码形式
	cout << "从键盘输入一个数" << std::endl; //endl表示的是换行符,同时也有强制将缓冲区内容全部输出的功能
	std::cin >> a;//通过“名字限定” std::cin; cin表示键盘的输入流对象,>> 等待键盘输入
	a = sin(a);
	cout << a;//cout代表屏幕窗口的输出流对象
	return 0;

#include <iostream> //标准输入输出头文件
#include <cmath>
using namespace std;//引入整个名字空间std中的所有名字;cout&cin都属于名字空间std

int main()
	double a;
	cout << "从键盘输入一个数" << endl;
	cin >> a;
	a = sin(a);
	cout << a;
	return 0;

变量定义

变量“即用即定义”(在需要变量的地方,随时定义),且可用表达式初始化

int main()
	double a = 12 * 3.21;
	double b = a + 1.112;
	
	cout << "a contains " << a << endl;
	cout << "b contains " << b << endl;

	a = a * 2 + 6;
	double c = a + b * a;//“即用即定义”,且可用表达式初始化
	cout << "c contains " << c << endl;
	return 0;

程序块变量作用域

程序块内部作用域可定义域外部作用域同名的变量,同时在该块内就隐藏了外部变量

#include <iostream>
using namespace std;

int main()
	double a;
	cout << "Type a number : ";
	cin >> a;
	
		int a = 1;//"int a"隐藏了外部作用域的“double a”
		a = a * 10 + 4;
		cout << "local number" << a << endl;
	
	cout << "You typed: " << a << endl;//main 作用域的 “double a”
	return 0;

for循环

for循环语义可以定义局部变量

#include <iostream>
using namespace std;

int main()
	int i = 0;
	for(int i = 0; i<4; i++)
		cout << i << endl;
	
	cout << "i contains : " << i << endl;
	for(int i = 0; i<4; i++)
		for(int i = 0; i<5; i++)
			cout << "for for i : " << i << endl;
		
		cout << "for i : " << i << endl;
	
	return 0;

访问全局变量与局部变量

访问和内部作用域变量同名的全局变量,要用全局作用域限定 ::

#include <iostream>

double a = 1.22;

int main()
	double a = 256;

	cout << "local a : " << a << endl;
	cout << "global a : " << ::a << endl;// :: 是全局作用域限定
	return 0;

引用类型

C++引入了“引用类型”,即一个变量是另一个变量的别名;(在C语言中所有的类型都是“值类型”,C语言中定义的每一个变量都是一个内存块的名字);引用变量并不占用单独的内存块,或者说引用变量与原变量都对应着同一个内存块,引用变量和原变量只是同一个内存块的不同名字

#include <iostream>
using namespace std;

int main()
	double a = 2.22;
	double &b = a;// b是a的别名,b就是a,它俩只是同一个内存的不同的名字
	b = 89;//也就是 a = 89;这俩变量的任意之一的改变都会改变另一个,因为它俩指向的内存块是同一个;
	cout << "a contains : " << a << endl;// Displays : 89
	return 0;

引用经常用作函数的形参,表示形参和实参是同一个对象,在函数内部对形参的修改就是对实参的修改。

#include <iostream>

using namespace std;

void swap(int x, int y)
	cout << "swap函数交换前" << x << " " << y << endl;
	int t = x; x = y; y = t;
	cout << "swap函数交换后" << x << " " << y << endl;


/*
	x,y代表的是2个int类型的指针变量,函数代码含义:修改的是 x y 指向的内存中的数据,并没有修改 x y 本身 
*/
void swap1(int *x, int *y)
	cout << "swap1交换前:" << *x << " : " << *y << endl;
	int t = *x;
	*x = *y;
	*y = t;
	cout << "swap1交换后:" << *x << " : " << *y << endl;


/*
	x y 是实参的引用,对x/y的操作会修改到实参
*/
void swap2(int &x, int &y)
	cout << "swap2数据交换前:" << x << " : " << y << endl;
	int t = x;
	x = y;
	y = x;
	cout << "swap2数据交换后" << x << " : " << y << endl;


int main()
	int a = 3, b = 4;
	swap(a, b);//该函数无法有效变换a,b的值
	cout << "a : " << a << " b : " << b << endl; // Displays 3 4

	int c = 1, d = 10;
	swap1(&c, &d);// 在swap1 中 *x *y 代表的就是 c 和 d,可以得到预期的结果:成功交换
	cout << "c:" << c << " d : " << d << endl;

	int e = 2, f = 20;
	swap2(e, f);//swap2中 x/y 是 e/f 的引用,直接可以划上等号,互相影响
	return 0;

当实参占内存大时,用引用代替值(需要复刻)可提高效率;
如果不希望实参被修改,可以用const修饰符;

#include <iostream>
using namespace std;

void change(double &x, const double &y, double z)
	x = 100;
	y = 101; // !!! 此处y不可修改,因为是const double &, 编译时期就会报错
	z = 102;


int main()
	double a,b,c;
	
	change(a, b, c);
	cout << a << b << c << endl;// display: 
	return 0;

内联函数

对于不包含循环的简单函数,建议用inline关键字声明为"inline内联函数"; 编译器会将内联函数调用处用其代码展开(替换),称为“内联展开”,避免函数调用开销,提高程序执行效率

#include <iostream>

using namespace std;

inline double distance(double a, double b)
	return sqrt(a*a + b*b);


int main()
	double c = 6, d = 7;
	//下面两行将产生同样的代码
	cout << distance(c, d) << endl;
	cout << sqrt(c*c + d*d) << endl;

	return 0;

try-catch

通过 try-catch 处理异常情况,正常代码放在try块,catch中捕获try块抛出的异常

#include <iostream>
#include <cmath>

using namespace std;

int main()
	int a, b;
	cin >> a;
	cout << a << endl;

	//用法一
	try
		if(a > 100) throw 100;
		if(a < 10) throw 10;
		throw a/3;
	catch(int result)
		cout << "Result is: " << result << endl;
		b = result + 1;
	catch(char *s)
		...
	
	cout << "b : " << b << endl;

	//用法二
	char zero[] = "zero";
	char pair[] = "pair";
	char notprime[] = "notprime";
	char prime[] = "prime";

	try
		if(a == 0) throw zero;
		
	catch
	
	return 0;

以上是关于C入门C++ 基础笔记的主要内容,如果未能解决你的问题,请参考以下文章

《c++游戏编程入门》读书笔记

C++基础(3分钟内)快速入门

《黑马程序员》C++基础入门

《黑马程序员》C++基础入门

C++笔记--面向对象(OOP)编程基础--STL入门与使用

黑马程序员 C++教程从0到1入门编程笔记6C++核心编程(文件操作)