【C++】03 基础语法

2020/8/10 -12,暑假留校,导师讲解C++基础语法时所做笔记。

C++程序设计

开发环境

VS 2019 社区版

将解决方案和项目放在同一个目录中 勾选上

重要视图

解决方案资源管理器

类视图

重要文件

.vcxproj
.sln

基础语法

注释

// 单行

/* */ 多行

编译

编译型语言

编译 -> 链接

编译得到.obj文件

调试

  • 调试 -> 设置断点 -> 开始调试 -> 逐语句

  • 错误类型 C 表示编译错误

  • 错误类型 LINK 表示链接错误 找不到函数定义

  • 调试 -> 窗口 -> 调用堆栈 查看调用关系

变量定义

int整型 、float单精度浮点型、double双精度浮点数、string字符串

数组

静态数组 double z[50]; 中括号中必须为常数

动态数组 double* z = new double[n] 使用指针

释放内存 delete []z

函数

C语言为面向过程语言,C++支持面向对象

函数需要声明。

重载:函数名相同,参数列表不同

面向对象

class CCrossSection
{
    CCrossSection()
    {
        // 初始化
    }; //构造函数
    ~CCrossSection()
    {
        delete []d;
        //释放资源
    }; //析构函数
    

    double m_c;  //全局变量
    
    void fun1();   //成员函数
    void fun2();
    
    public:   //公有
    	int a; //成员变量   //局部变量
    protected:   //保护
    private:   //私密
    	float b;
}

派生和继承

class CRectCrossSection : public CCrossSection
{
    //CRectCrossSection 继承 CCrossSection
}

结构

与类极为相似,仅有区别为构造函数和析构函数为public

struct sSection
{
    sSection() 
    {
        
    }
    ~sSection()
    {
        
    }
}

实例

CCrossSection section1; //实例
section.m_iNum = 5;
section1.fun1();

代码规范

  • 多加空格
  • 多加注释
  • i表示整型,d表示double 例如 m_iNum
  • m表示全局
  • 在构造函数中赋初始值,析构函数中释放空间
  • 将变量设为protected,设函数改变该值,方便调试

头文件

.h头文件只放类的声明

#include "CrossSection.h" 引入类

函数实现放在CrossSection.cpp

指针

CCrossSection* pSection1 = new CCrossSection;
pSection1 -> SetNum(5);
pSection1 -> fun1();

指针的生命周期人为控制;不会自动析构,可根据需要析构。这点与实例不同。

复用

基类/父类

class CStruct
{
 public:
    CStruct(){};
    ~CStruct(){};
 protected:
    double m_dInvertedElevation;
 public:
    void SetInvertedElevation(double dEle);
    double GetInvertedElevation();
    virtual void RunModel(); //虚函数
}

派生类/子类

class CStruct_InvertedSiphon : public CStruct
{
 public:
    CStruct(){};
    ~CStruct(){};
 protected:
    double m_dOutElevation;
 public:
    void SetOutElevation(double dEle);
    double GetOutElevation();
    void RunModel(); //实函数
}

在父类中设置虚函数,指针自动调用合适的函数。

CStruct* pStruct1 = new CStruct_InvertedSiphon();
pStruct1 -> RunModel();

CStruct* pStruct2 = new CStruct_AreaChange();
pStruct2 -> RunModel();

delete pStruct1;
delete pStruct2;

向量

#include <vector>

std::vector<CStruct*> pStructs;  //向量  容器

CStruct* pStruct1 = new CStruct_InvertedSiphon();
CStruct* pStruct2 = new CStruct_AreaChange();

pStructs.push_back(pStruct1);
pStructs.push_back(pStruct2);

for (int i = 0; i < pStructs.size(); ++i)  //C++中的循环
{
    pStructs[i] -> RunModel();
}

删除向量

for (int i = 0; i < pStructs.size(); ++i)  //C++中的循环
{
    delete pStructs[i];  //删除指针所指的位置
}
pStructs.clear(); //清空容器

map

#include <map>

CStruct* pStruct3 = new CStruct_InvertedSiphon();
CStruct* pStruct4 = new CStruct_AreaChange();
CStruct* pStruct5 = new CStruct_InvertedSiphon();


std::map<std::string, CStruct*> pMapStructs; //键值对 哈希表 字典 映射

pMapStructs["第一倒虹吸"] = pStruct3;
pMapStructs["第二渐变段"] = pStruct4;
pMapStructs["第三倒虹吸"] = pStruct5;

pMapStructs["第一倒虹吸"] -> RunModel();
pMapStructs["第二渐变段"] -> RunModel();
pMapStructs["第三倒虹吸"] -> RunModel();

删除向量

通过迭代器删除

std::map<std::string, CStruct*>::iterator it; //定义迭代器
for (it = pMapStructs.begin(); it != pMapStructs.end(); ++it)
{
    delete it ->second;  
}
pMapStructs.clear();

判断

if ()
{
    
}
else if ()
{
    
}
else
{
    
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢家波

如果对你有帮助,请我喝杯茶吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值