openFOAM学习笔记(一)—— C++基础
一、C++基础
很久不用C++,学习openFOAM之前复习一下C和C++相关的基础知识
1.1常用操作符
++,–
整型变量的自加自减,用法很多。最简单的有i++,i–。运算速度会比i=i+1更快。
此外还有 j = i++ 和 j = ++ i ,前者表示先赋值后自加,后者表示先自加后赋值。
类似的用法还有 i += 1 ,实际等价于i=i+1。A+=B等价于A = A+B
!
取反符号,没什么好说的。matlab中对应符号~
!true = false
!1 = 0
!0 = 1
12!=1 = 1
%
取模运算符,即整除后的余数A%B
等价于fortran中的mod(A,B)
& | 和 && ||
后者是逻辑运算与和或,对应fortran中的.and.
和.or.
,有0&&1=0
和1&&1=1
。
而&
是按位与,例如15
的二进制为00001111
以及127
的二进制为11111111
。那么按位与结果为15&127=0x00001111&0x11111111=0x00001111=15
(这么奇怪的运算谁会用啊。。。)
同样|
表示按位或,即15&127=0x00001111&0x11111111=0x11111111=127
使用逻辑运算时要避免使用前者发生未知错误
三元运算符?:
直接给例子说明
a=2>1?3:4
此时2>1
,所以执行左侧,即赋值a=3
1.2 openFOAM中的运算符
cin cout Info
cin>>a
cout<<b
这是C++自带的输入输出流,可对很多不同类型的变量输入输出,而openFOAM中一般使用并行运算,为了方便输出特殊定义了Info
外积、内积、双重积、差积
. *
外积、&
内积、&&
双重积、^
差积
1.3 条件,循环
if条件,注意大括号外没有逗号
if(condition) {...} else {...}
while循环
while(condition){...}
for循环,注意括号中为分号,(初始化;测试;更新)
for(i=1;i<10;i++){...}
switch选择
switch(expression)
{case1:...;
case2: ...;
default:...;}
跳出循环有三个指令, break
跳出当前循环层;continue
直接进行下一次循环,return
退出当前函数
1.4 标识符可见范围
即using namespace std
的使用,参考该链接(https://blog.csdn.net/quyafeng2011/article/details/68921750)。简单的说,C++中的函数库并非在整个代码段中都是默认可见可以任意调用的,如果没有这样声明,就需要用类似这样的方式调用
std::cout << std::hex<< 3.4<< std::endl;
声明之后,可以直接写成
cout << hex<< 3.4<< endl;
1.5 数组
基础用法如下
double a[4];
double b[]={1,2,3} ;
C++中的数组模板
#include<vector>
using namespace std;
vector<double> a(5); // 大小为 大小为55的数组,初始化为0
vector<double>b (5,1.0); //大小为5的数组,初始化为1.0
vector<double> c(b); //创建c为b一个副本
openFOAM编写的时候,C++的标准库还没有形成,所以openFOAM自行给定了一个库,和当前C++的标准库有区别。C++中的vector
类似OpenFOAM中的list
,而openFOAM中的vector
是只有三个分量的向量
1.6 子函数相关
首先给一个代码段方便说明
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
。 - 不同的函数可以有相同的名字,根据他们的输入值进行区分,这种技巧成为重载。
- 输入的值可以设定为默认
F(scalar a, scalar b=0);
,但默认的输入值必须在最后。
传参时,可以为swap(int a, int b)
,这是传值,swap(int &a, int &b)
为传地址,后者更好。
子函数内的值的作用域仅限当前子函数,如果子函数内想要调用全局的变量,需要使用::a
1.7 指针
给一个简单的例子
#include <iostream>using namespace std;int main ()
{int var = 20; // 实际变量的声明int *ip; // 指针变量的声明int bip = &var; // 在指针变量中存储 var 的地址b = *ip //把ip存储的地址的值取出赋给breturn 0;
}
用new
初始化的指针需要用delete
删除,而openFOAM中另外有autoPtr
创建指针,可以自动删除
1.8 类型别名的定义
在openFOAM中大量使用,这里简单提到
typedef vector<double> doubleVector;
typypedef GeometricField<scalar, fvPatchField, volMesh> volScalarField;
typedef GeometricField<vector, fvPatchField, volMesh> volVectorField;
1.9 面向对象
类的定义与使用直接给一个简单的例子
#include <iostream>using namespace std;class Box
{public:double length; // 长度double breadth; // 宽度double height; // 高度
};int main( )
{Box Box1; // 声明 Box1,类型为 BoxBox Box2; // 声明 Box2,类型为 Boxdouble volume = 0.0; // 用于存储体积// box 1 详述Box1.height = 5.0; Box1.length = 6.0; Box1.breadth = 7.0;// box 2 详述Box2.height = 10.0;Box2.length = 12.0;Box2.breadth = 13.0;// box 1 的体积volume = Box1.height * Box1.length * Box1.breadth;cout << "Box1 的体积:" << volume <<endl;// box 2 的体积volume = Box2.height * Box2.length * Box2.breadth;cout << "Box2 的体积:" << volume <<endl;return 0;
}
class
声明了类box
,用对象声明对象Box1
,直接调用方式为Box1.height
。- 对象的指针也可以类似的声明
box *Box2
,而此时调用方式为Box2->height
。 - 类内变量分
public
对类内和类外均可见protected
仅对类内的和子类可见private
仅对类内可见。
类会有一些内置函数,构造函数和析构函数比较常用,下面简单罗列
class Empty {
public:
Empty(); Empty(); // // 缺省构造函数
Empty( const Empty& ); // 复制构造函数
~Empty(); // 析构函数
Empty & operator=( const Empty& ); // 赋值运算符
Empty* operator&(); // 取址运算符
const Empty* operator&() const; // 取址运算符 const
};
- 构造函数和析构函数都是没有输入值的
这部分内容可能还需要扩充
1.10 关键字
const
表示常量,初始化方式const int a=10;
。表示变量赋初值后就不能再修改。
static
通常在函数名前表示静态函数。静态函数可以使用类名直接调用,无需构造对象。用在类内变量上表示所有对象共享。用在函数中表示函数调用者共享,即函数调用完,该变量不会释放,而是保存当前值,知道整个程序结束。静态函数的调用方式如下
aut PtoPtr<incompressible::turbulenceModel> turbulence
(
incompressible::turbulenceModel::New(U, phi, laminarTransport)
);
openFOAM学习笔记(一)—— C++基础相关推荐
- 《Java并发编程实践》学习笔记之一:基础知识
<Java并发编程实践>学习笔记之一:基础知识 1.程序与进程 1.1 程序与进程的概念 (1)程序:一组有序的静态指令,是一种静态概念: (2)进程:是一种活动,它是由一个动作序列组成 ...
- JavaScript学习笔记02【基础——对象(Function、Array、Date、Math)】
w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...
- JavaScript学习笔记01【基础——简介、基础语法、运算符、特殊语法、流程控制语句】
w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...
- 家族关系查询系统程序设计算法思路_【学习笔记】数据库基础 - 查询优化
目录 什么是数据库查询优化? 影响查询优化的因素 优化策略概述 查询优化的总体思路 语义优化 -- 内容等价性 语法优化(逻辑层优化)---语法等价性 执行优化(物理层优化) 查询优化在DBMS中的位 ...
- 菜鸟学习笔记:Java基础篇7(包装类、时间相关类、文件类、异常处理类)
菜鸟学习笔记:Java其他常用类 基本数据类型包装类 时间处理和文件处理相关类 Date时间类 SimpleDateFormat Calendar日历类 文件类 异常机制 异常的概念 Java异常处理 ...
- 菜鸟学习笔记:Java基础篇6(数组、字符串)
菜鸟学习笔记:Java常用类(数组.字符串) 数组 概述 数组的定义 二维数组 数组查找和排序 查找 排序 数组运用--字符串 不可变字符序列(String) 可变字符序列(StringBuilder ...
- 菜鸟学习笔记:Java基础篇5(抽象类与接口、回调函数、内部类)
菜鸟学习笔记:Java面向对象篇下 抽象类 接口 回调函数 内部类 成员内部类 匿名内部类 抽象类 通过前面知识的学习,抽象类这个概念应该不难理解,但比较容易和后面要说的接口混淆,而且在面试中也比较爱 ...
- 菜鸟学习笔记:Java基础篇4(面向对象三大特征)
菜鸟学习笔记:Java面向对象篇中 继承 概念 方法重写(override) Object类 Super关键字 组合 final关键字补充 封装 访问控制符 多态 继承 概念 继续上一篇的例子: #m ...
- 菜鸟学习笔记:Java基础篇3(面向对象思想、程序执行过程内存分析、面向对象重要概念)
菜鸟学习笔记:Java面向对象篇上 Java面向对象的思想 Java程序执行过程内存分析 Java垃圾回收机制 构造方法 方法重载(overload) static关键字 this关键字 Java面向 ...
- 菜鸟学习笔记:Java基础篇2(变量、运算符、流程控制语句、方法)
菜鸟学习笔记:Java基础篇2 变量 基本概念 变量作用域 final关键字 运算符 算术运算符 比较运算符 逻辑运算符 位运算符 赋值运算符 条件运算符 运算符优先级 Java三种流程控制语句 顺序 ...
最新文章
- dede login.php,DedeCms会员登录成功,又跳转到登录页面
- jwt token 附加用户信息_SpringBoot+JWT实现token验证并将用户信息存储到@注解内
- 使用SQLite学习SQL
- flask连接不到mysql数据库,即使使用了python flask mysql,也无法将数据提交到数据库(使用python flask mysql)连接.提交()...
- 寻路机器人单片机程序示例_单片机精华程序代码示例:DS1302时钟程序
- 2021牛客多校9 - Cells(推公式+NTT)
- Serverless 实战 —— 阿里云函数计算配合SpringBoot项目
- C99中的变长数组(VLA)
- css控制td比内容宽5px_CSS从零开始——布局
- 斐波那契数列c语言编程递归,C语言实现Fibonacci数列递归
- Rhino6.25软件安装教程|兼容WIN10
- UIKit的简单入门介绍
- 测试一枚-记录工作-覆盖率(二)
- 七日杀 服务器不显示,七日杀进服务器不显示画面 | 手游网游页游攻略大全
- RecyclerView 嵌套RecyclerView 或者 ScrollView当中嵌套RecyclerView ,子View会自动滚动到顶部
- 使团队高效的十种方法
- 库克和他的“后乔布斯”时代苹果
- 云之梦php免费教学视频下载_[全套视频] 云知梦2017最新PHP工程师全套视频教程 laravel框架版...
- python后端开发学习重点
- 纸面发布会伤害手机行业
热门文章
- VS SDK更新问题(error MSB8036: 找不到 Windows SDK 版本10.0.14393.0)
- HTML爱心照片墙源码
- 马云卸任后为物流站台 “菜鸟”将飞向何方
- 开营第二天,带你领略插画的力量
- writeline是什么意思_write是什么意思_write的翻译_音标_读音_用法_例句_爱词霸在线词典...
- 2020区块链50指数样本股大盘点:有人蹒跚学步,有人激流勇进
- SpringBoot整合Redis - @Cacheable 和 RedisTemplate
- 【网关路由测试】——网关状态转换测试
- python的增添删除查询列表
- 编译Chromium OS