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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,504评论 1 51
  • C++入门基础 namespace专题讲座 namespace概念 所谓namespace,是指标识符的各种可见范...
    蔡俊宇阅读 776评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,398评论 25 707
  • 步入大学之后便与火车结下不解之缘,从此生活中也就来不来就开启一次又一次说走就走的旅行,然而任性的代价就是硬座车厢里...
    载着蜗牛的蒲公英阅读 365评论 0 0