编程培训:程序开发入门和编程习惯培养

C++

Posted by JS on December 1, 2022

概述

  • 程序开发入门
  • 编程习惯培养

编程语言

  • C++ MFC
  • C# wpf
  • python
  • QT
  • VB
  • java

学习过程

  • 基本语法
  • 例题
  • 兴趣编程
  • 项目开发
  • 补充基础(数据结构、高级用法)
  • 外延
  • 开源库、不重复造轮子 CGridCtrl CChartCtrl

参考资料

C/C++语言基础

数据类型

  • int
  • BOOL/bool
  • float/double
  • char
  • string

判断

  • if else
  • switch

循环

  • for
int sum = 0;
for (int i=1; i<=100; ++i)
{
    sum = sum + i;
}
  • while
while (bFlag)
{

}

数组

int arr1[10];
int arr2[3][4]

字符串

函数

int GetNum(int iType)
{

}

结构体

//申明一个结构体 
struct book 
{
    char title[MAXTITL];//一个字符串表示的titile 题目 ; 
    char author[MAXAUTL];//一个字符串表示的author作者 ; 
    float value;//一个浮点型表示的value价格; 
};//注意分号不能少,这也相当于一条语句;

※类

class Point
{
    public:
        void setPoint(int x, int y);
        void printPoint();
    private:
        int xPos;
        int yPos;
}
  • 类和对象
  • 继承
  • 构造函数
  • 析构函数
  • 成员函数
  • 成员变量
  • 重载运算符
  • 公有
  • 私有

※指针

p, *p, &p;

※动态数组

new
delete
delete[]
int N=10;
int* Num1 = new int[N]();
memset(Num1, 0, N * sizeof(int)); //初始化函数
delete[] Num1;

STL标准模板库

  • 容器、算法、迭代器
  • vector
  • list
  • CArray
#include <vector>
using namespace std;
//STL 容器不单单可以存储基础数据类型,也可以存储类对象
class Teacher
{
public:
	Teacher(int age) :age(age){};
	~Teacher(){};
public:
	int age;
};
void test02()
{
	vector<Teacher> v; //存储 Teacher 类型数据的容器
	Teacher t1(10), t2(20), t3(30);
	v.push_back(t1);
	v.push_back(t2);
	v.push_back(t3);
	vector<Teacher>::iterator pStart = v.begin();
	vector<Teacher>::iterator pEnd = v.end();
	//通过迭代器遍历
	while (pStart != pEnd){
		cout << pStart->age << " ";
		pStart++;
	}
	cout << endl;
}

编程习惯

命名

  • 匈牙利命名法:在变量和函数名中加入前缀以增进人们对程序的理解
  • 驼峰命令法:混合使用大小写字母来构成变量和函数的名 printEmployeePaychecks();
  • 下划线命令法:函数名中的每一个逻辑断点都有一个下划线来标记 print_employee_paychecks();

大驼峰式命名规则:FirstName, CamelCase 小驼峰式命名规则:firstName, camelCase 帕斯卡(Pascal)命名法

  • 见名知意
  • 类型+含义 例如:fNodeDispX-float类型X向节点位移

函数名

  • 首字母大写,之后每个单词首字母大写
  • GetXXX() 获取数据
  • SetXXX() 定义数据
  • IsSame(); IsExist();
  • Clear() 清空数据

变量

  • 首字母小写,之后每个单词首字母大写
  • float fValue
  • int iNum nNum
  • bool/BOOL bFlag
  • char chDegree
  • string/CString sName
  • 指针 pData
  • 数组 vData arrData aData
  • 成员变量 m_
  • 临时变量 tmp_

  • 类(class) CBeam 对应cpp和h文件一般不加C,例如Beam.cpp/Beam.h
  • 对象 cBeam
  • 成员变量
  • 指针 pBeam
  • 数组 vBeam arrBeam aBeam

对话框控件

  • 类名加C,文件名一般不加C
  • 资源用大写字母表示
  • 对话(Dialog) CDlgDefineBeam DlgDefineBeam.cpp DlgDefineBeam.h IDD_DIALOG_DEFINE_BEAM
  • 按钮控件 Button IDC_BUTTON_DEFINE cButtonDefine cBtnDefine
  • 静态文本 Static IDC_STATIC_SEC cStaticSec
  • 文本框 EditCtrl cEditTxt
  • 下拉框 IDC_COMBO1 cCombox cComb
  • 复选框 IDC_CHECK_RD cCheck
  • 单选框 IDC_RADIO1 cRadio
  • 类成员一般加m_cComb

注释

  • 尽可能详细
  • 变量名称
  • 运行逻辑
  • 参数

代码

  • 少用特别复杂的逻辑,除非有特殊要求
  • 每个函数不要过长
  • {}不宜超过3层
  • 每行代码不要过长
  • 创建对象要记得删除,可在写new代码的时候,就在相应的位置写delete,避免忘记。删除对象,同时对对象指针赋 NULL,除非能确定删除后指针马上就不用(例如析构函数里面),这是因为一个NULL的指针被非法访问总是能够方便地查找,一个非NULL的失效指针难以查找错误.
  • 循环变量一般定义为 int i , j , k

案例

  • 初始缺陷工况
  • 缺陷工况类
  • 对话框类
  • .h .cpp .rc

版本管理

  • 编程爱好者 → 程序员
  • tfs
  • git

git

  • 外网
  • 内网
  • 项目创建
  • 提交
  • 撤销
  • 还原
  • 对比

对于非研发人员

  • 了解程序运行逻辑
  • 测试

任务

  • 提交代码到github或gitee
  • 根据匈牙利命名法修改代码
  • 申请云桌面账号,尝试跟踪一个bug,解释bug产生原因