C++ 之初体验

前言

C++与Objective-C都是在1980+年代诞生,所以语法糖上面都有很多相似地方,学起来并不难。至于我用的IDE,我直接用的是Xcode,很方便。

国际惯例,打印hello world

cout << "hello world" << endl;

这里介绍几个关键词:

cout 输出
cin 输入
endl 换行打印

cout 语法形式:

cout << x << endl;
cout << "x + y =" << x+y << endl;

cin 语法形式:

cin >> x;
cin >> x >> y;

这样的输入、输出方式有哪些便利?
1、不用关注占位符
2、不用关注数据类型
3、不易出现问题

C++命名空间(namespace)

在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。

举个例子:同个年级有相同名字的同学,那样为了避免认错人,我们可以把他们分到不同班级里,这样就区分开来了。这里的班级就可以称为命名空间。

关于命名空间描述几点

1、使用namespace定义命名空间。
2、通过命名空间可以区分具有相同名字的变量。
3、通过命名空间可以区分具有相同名字的函数。

代码示例:

#include <iostream>
#include <stdlib.h>
using namespace std;
   namespace     myNum            //填写命名空间的关键字
{
    int x = 105;
}
int main()
{
    // 使用bool类型定义isOdd,作为状态位
        bool    isFlag = false;       
    
    if(myNum::x % 2 == 0)
    {
        //改变状态位的值,使其为false
        isFlag = false;
    }
    else
    {
        //改变状态位的值,使其为true
        isFlag = true;
    }
    // 判断状态位的值
    if(isFlag)
    {
        // 如果状态位的值为true,则打印变量x是奇数
        cout << x是奇数 ;
    }
    else
    {
        // 如果状态位的值为false,则打印变量x是偶数
        cout << x是偶数 ;
    }
    return 0;
}

C++ 引用

代码示例:

#include <iostream>
using namespace std;
int main(void)
{
    int x = 3;
    //定义引用,y是x的引用
    int &y = x;
    //打印x和y的值
    cout << x << endl;
    cout << y <<endl;
    //修改y的值
    y = 100;
    //再次打印x和y的值
    cout << x << endl;
    cout << y <<endl;  
    return 0;
}

C++ const关键字

代码示例:

//const
#include <iostream>
using namespace std;
int main(void)
{
    //定义常量count
    const int count = 3;
    const int *p =  &count;
    //打印count次字符串Hello C++
    for(int i = 0; i < count; i++)
    {
        cout << "Hello C++" << endl;
    } 
    return 0;
}

C++函数新亮点

函数参数默认值
void fun( int i,int j=5,int k=10 );//有默认参数值的参数必须在参数表的最右端
函数重载

在相同作用域内
用同一个函数名定义的多个函数
参数个数和参数类型不同

内联函数

编译时将函数体代码和实参代替函数调用语句
内联函数关键字:inline

关于C++函数形参默认值的说法

1、当函数有多个形参时,可以都有默认值。
2、当函数有多个形参时,可以都没有默认值。
3、当函数有多个形参且都有默认值时,实参个数可以少于形参个数。

代码示例:

#include <iostream>
using namespace std;
/**
  *函数功能:返回a和b的最大值
  *a和b是两个整数
  */
int getMax(int a, int b)
{
    return a > b ? a : b;
}

/**
  * 函数功能:返回数组中的最大值
  * arr:整型数组
  * count:数组长度
  * 该函数是对上面函数的重载
  */
int getMax(int *arr,int count)
{
    //定义一个变量并获取数组的第一个元素
    int maxNum = arr[0];
    for(int i = 1; i < count; i++)
    {
        //比较变量与下一个元素的大小
        if(maxNum < arr[i])
        {
            //如果数组中的元素比maxNum大,则获取数组中的值
            maxNum = arr[i];
        }   
    }
    return maxNum;
}

int main(void)
{
    //定义int数组并初始化
    int numArr[3] = {3, 8, 6};
    
    //自动调用int getMax(int a, int b)
    cout << getMax(numArr, 3) << endl;
    
    //自动调用返回数组中最大值的函数返回数组中的最大值
    cout << getMax(numArr[0], numArr[2]) << endl;
    return 0;
}

C++内存管理

什么是内存管理?

内存的本质是资源

操作系统掌管内存资源
对于我们开发者,我们能手动申请与归还
申请/归还内存资源就是内存管理

如图:

A0BA3DAE-7E27-412F-AB75-6E31EF74FE7B.png
1A160E69-BD72-4B65-983B-AE17F12E7A9B.png
4164E4A2-EBE1-44A4-9EA9-441213D7889E.png
C8FEF922-5C3C-4AF6-9CD6-67F01BED98A5.png

内容总结
使用new申请内存,使用delete释放内存
申请内存需要判断是否成功,释放内存需要设空指针
new与delete配套使用

代码示例:

#include <string.h>
#include <iostream>
using namespace std;
int main(void)
{
    //在堆中申请100个char类型的内存
    char *str = new char[100];
    //拷贝Hello C++字符串到分配的堆中的内存中
    strcpy(str, "Hello imooc");
    //打印字符串
    cout << str << endl;
    //释放内存
    delete []str;
    str = NULL;
    return 0;
}

参考资料

http://www.imooc.com/learn/342
http://www.imooc.com/learn/381

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 8,649评论 1 52
  • C++入门基础 namespace专题讲座 namespace概念 所谓namespace,是指标识符的各种可见范...
    蔡俊宇阅读 578评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 128,932评论 18 137
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 164,116评论 24 696
  • 步入大学之后便与火车结下不解之缘,从此生活中也就来不来就开启一次又一次说走就走的旅行,然而任性的代价就是硬座车厢里...
    载着蜗牛的蒲公英阅读 231评论 0 0
  • 从木心故居乌镇返深,便迫不及待入手了木心先生的系列作品辑,大抵是希望能更靠近他的思想。 木心先生在纽约为那些文学大...
    且柔阅读 195评论 0 4
  • 谷雨节气, 果然落了好多雨 天空一惊一乍地响着春雷 我握着伞 伞下面只有我的身影 我想起在雨里奔跑的样子 我和你 ...
    王不烦阅读 39评论 0 0