C++基础
标识符可见范围(using namespace std)
C++中的函数库并非在整个代码段中都是默认可见可以任意调用的,如果没有这样的声明(using namespace std),就需要用如下的方式调用
std::cout<< std::hex<< 3.4<< std::endl;
声明之后可以直接写成
cout << hex <<3.4<<endl
数组
基础用法如下:
double a[4];
double b[] = {1,2,3};
对于如上的数组b[]={1,2,3},我们希望得到它的具体内容:
#include<iostream>
using namespace std;
int main(){
double b[]={1,2,3};
int length = sizeof(b)/sizeof(b[0]);
for (int i=0;i < length;++i){
cout <<b[i]<<endl;
}
return 0;
}
<<<<1
2
3
如上代码中的sizeof(b)是得到整个数组b的大小(以字节为单位),也就是b是double型的数组(double型占8个字节),b中有3个数,所以sizeof(b)=24,再除以b数组第一个的大小(sizeof(b[0]))就是b的元素个数;
然后endl的作用是输出之后换行;
子函数相关
首先给一段代码:
void swap(int &a, int &b)
{
int c = a;
a = b;
b = c;
}
int main()
{
int a = 1, b = 2;
swap(a,b);
cout<<"a="<<a<<",b="<<b<<endl;
}
- 函数名前面的返回值类型可以不写,默认为空类型void.
- 不同的函数可以有相同的名字,根据他们的输入值区分,称为重载.
- 传参时,可以为swap(int a, int b),这是传值;也可以swap(int &a, int &b)是传地址,后者更好.
- 子函数内的值的作用域仅限当前子函数,如果子函数内想要调用全局变量,需要使用::a
指针
给一个例子:
#include <iostream>
using namespace std;
int main ()
{
int var = 20; // 实际变量的声明
int *ip; // 指针变量的声明
int b
ip = &var; // 在指针变量中存储 var 的地址
b = *ip //把ip存储的地址的值取出赋给b
return 0;
}
- ip存的是var的地址,ip=0x7fff3577c820.
- *ip是var的值,*ip=20;进一步b=*ip=20.
- openFOAM中有autoPtr创建指针,可以自动删除.
类型别名的定义
typedef 关键词的语法是:
typedef existing_type new_type_name;
例如:
typedef std::vector<std::pair<int,double>> IntDoublePairVector
上述代码用IntDoublePairVector代替原来的类型名.其中std::vector<std::pair<int,double>>是存储了整型和双精度浮点型组成的键值对的向量
面向对象
类的定义,如下例子:
#include <iostream>
using namespace std;
class Box
{
public:
double length; // 长度
double breadth; // 宽度
double height; // 高度
};
int main( )
{
Box Box1; // 声明 Box1,类型为 Box
double volume = 0.0; // 用于存储体积
// box 1 详述
Box1.height = 5.0;
Box1.length = 6.0;
Box1.breadth = 7.0;
// box 1 的体积
volume = Box1.height * Box1.length * Box1.breadth;
cout << "Box1 的体积:" << volume <<endl;
return 0;
}
- class声明了类box,用对象声明对象Box1,直接调用方式为Box1.height.
- 对象的指针也可以类似的声明box Box2,而此时调用方式为Box2->height*.
- 类内变量分public对类内和类外均可见protected仅对类内的和子类可见private仅对类内可见.
- 类的定义后面还要有一个分号.