精简CPP1
看数据结构 经常遇到c++语法, 所以找了个不算长的c++教程看了看. 暂时准备一天一节吧.
第1章 C++简介
基本语法
输入输出
#include<iostream>
using namespace std;
int main()
{
int x;
cin >> x; // 接收输入指令
cout << "x=" << x << endl; // 输出函数
return 0;
}
命名空间
防止程序中的同名问题, 最常见的 std 命名空间.
int main()
{
int i;
cin >> i;
cout << "i = " << i << endl;
cin >> a >> b >> c;
// 等价于
// cin >> a;
// cin >> b;
// cin >> c;
return 0;
}
const 常量
常量声明时必须赋初值, 而在程序中间不能改变值.
int main()
{
const int LENGTH = 10; // 全大写表示常量
return 0;
}
new 与 delete
- new: 用于从堆终分配指定大小的内存区域, 并返回获得内存区域的首地址. 相较于malloc可以自动计算大小, 无需指针转换.
- delete: 用于释放 new 分配的堆内存.
int main()
{
int num =0;
cin >> num;
// 分配了一个动态数组
int* arr = new int[num];
delete[] arr;
return 0;
}
引用
引用是某个对象的别名
<类型> &引用名 = 变量名;
int main()
{
// 很少单独使用
// 通常作为形参使用
int a = 10;
int &b = a; // b是a的别名
}
- 变量声明出现&引用运算符, 其余&都是取地址符
- 引用代表一个变量的别名, 必须在定义时初始化, 不能再定义完成后再赋值
- 一个引用名只能作为一个变量的别名
#include<instream>
using namespace std;
void swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
cout << "x = " << x << "y = " << y << endl;
swap(x, y);
cout << "x = " << x << "y = " << y << endl;
return 0;
}
函数重载
一个函数的多种写法, 函数名相同, 参数不同.
- 形参必须不同, 个数不同或类型不同
- 程序将根据实参和形参的类型以及个数的最佳匹配选择调用的函数.
int main()
{
// 参数类型不同
int add(int x, int y);
float add(float x, float y);
//形参个数不同
// int add(int x, int y);
int add(int x, int y, int z);
}
示例: 计算平方和
#include<iostream>
using namespace std;
int sumOfSquare(int a, int b)
{
return a*a + b*b;
}
double sumOfSquare(double a, double b)
{
return a*a + b*b;
}
int main()
{
int m, n;
cout << "ENTER TWO INTEGER:";
cin >> m >> n;
cout << "THERE SUM OF SQUARE: " << sumOfSquare(m, n) << endl;
double x, y;
cout << "ENTER TWO REAL NUMBER: " ;
cin >> x >> y;
cout << "THERE SUM OF SQUARE:" << sumOfSquare(x, y) << endl;
return 0;
}
传入参数不要有模棱两可的情况
int sumOfSquare(double a, int b)
{
return a*a + b*b;
}
double sumOfSquare(int a, double b)
{
return a*a + b*b;
}
带默认值的函数
声明时预先给出默认的形参值, 调用时给出实参, 则采用实参, 否则仍使用预先的默认参数值.
int add(int x = 5, int y = 6)
{
return x + y;
}
int main()
{
add(10, 20); // 10 + 20
add(10); // 10 + 6
add(); // 5 + 6
return;
}
一般情况下, 建议给每个默认参数都设置一个初始值, 不要有的设置有的不设置.
函数调用顺序
当声明的函数位置在 main 函数之后, 则需要在 main 函数前提前声明函数原型.
如果在 main 函数前声明函数原型, 则必须在声明原型时, 写明默认参数值.
int add(int x= 5, int y = 6)
int main()
{
}
int add (int x, int y)
{
return x + y;
}
练习1:
- 接收 int 输入值 n, 动态分配空间为 n 的 radius
- 从标准输入 n 个浮点数存储在数组 radius 中, 这 n 个数代表 n 个圆的半径
- 编写函数 sumArea(double* radius, int n) 求这 n 个圆的面积和
- 输出总面积, 保留小数点后5位.
- 尽量使用 cin/cout, const, namespace, 引用, new/delete
#include<iostream>
using namespace std;
const double PI = 3.1415;
// 接收数组需要使用指针
double sumArea(double* radius, int num)
{
double sum = 0;
for(int i = 0; i < num; i++)
{
// 圆面积公式为 pi * 半径 * 半径
sum += radius[i] * radius[i] * PI;
}
return sum;
}
int main()
{
int num = 0;
double sum;
cout << "INPUT A INTEGER AS SIZE OF ARRAY: ";
cin >> num; // 7
double* radius = new double[num];
// 给半径数组赋值
// 初始值最好从0开始, 数组下标也是从0开始
for (int i = 0; i < num; i++)
{
radius[i] = i + 1;
}
sum = sumArea(radius, num);
cout << sum;
// 销毁使用完毕的内存
delete[] radius;
return 0;
}