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++ 基础笔记的主要内容,如果未能解决你的问题,请参考以下文章