4-C++远征之起航篇-学习笔记

c++教程起航篇

我们会讲C++那些事,C++与C语言的关系。

mark

C++诞生于贝尔实验室。

mark

C++之父: 本贾尼·斯特劳斯特卢普

C++社区排行榜

mark

最新排行,c++排名第三,Python排名第四

C++语言的应用领域:

嵌入式(手机,机顶盒),游戏编程,网络编程,系统编程

快,省

C与C++的关系:

C语言是C++的子集。

mark

C++在语法上完全兼容C,C++是从C的基础上发展而来的。

  • c语言是面向过程的语言,而C++是面向过程的语言又是面向对象的语言。
  • C语言的运行效率比c++更好。

学习C++,基础是学习C语言

C++ IDE环境搭建

我的IDE 与 IDE初体验

什么是IDE环境?

IDE: Integrated Development Environment

集成开发环境

一般包括代码编辑器,编译器,调试器和图形用户界面工具。

iso文件,虚拟光驱,找到setup.exe.

Visual Studio 2015 + Visual Assist X

链接: https://pan.baidu.com/s/1SgdThGYaLDyXDFKvaBSa5A 密码: 2333

安装后会提示更新,就更了吧。

因为我们学习c++,可以只安装C++部分。

  • 如何新建项目

新建项目 -> 选择Visual C++ -> win32控制台应用程序

mark

选择空文件,理解程序从无到有。

  • 如何新建文件

mark

源文件上点击右键添加新建项。

新建时选择cpp文件。

  • 如何设置字体字号(工具->选项->字体和颜色)

C++之初体验

那么就让我们驶出远征中的第一步->Hello C++

#include<iostream>
using namespace std;    //关于这里,且听下回分解
int main()
{
   cout<<"Hello C++";  //在此填写我们的开篇Hello C++
   return 0;
}

C++的新特性

C++基本知识

新的数据类型,新的初始化方法,随用随定义的特性

C语言中的数据类型

mark

  1. c++新增bool数据类型,数值为true与false

mark

mark

优:快捷方便,还有视觉上清晰易懂,程序易读易懂

  1. c++除了拥有语言自带的初始化方式外,新增了一种定义方式(直接初始化)

C语言提供的初始化方法: int x =1024

mark

除了与c语言一样的复制初始化,还有自己独有的直接初始化 优点:很快捷方便

  1. c++可随用随定义,而c的对变量的定义必须放置在函数体最前面

mark

mark

c语言方式下,程序长了还得调到上面定义变量很不方便。

总结: 新的数据类型(布尔类型),新的初始化方法(用括号括起来直接初始化),随用随定义的特性。

C++的输入输出方式

c语言中的I/O 方式

mark

C++中的I/O 方式

mark

cout 语法形式:

cout << x << endl;

两个小于号(中间没有空格),输入变量x(不需要区分类型,不需要%d等)。endl 和c语言中的\n是等效的。

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

错误示例如下:

cout << x,y,z << endl;

cin 语法形式:

cin >> x;

将外界的输入传递到x。不需要关注变量x的类型,不需要c语言的格式符。

cin >> x >> y;

cin输入方式, x y为变量. 依次为多个变量赋值。

这样的输入输出方式有哪些便利?

  • 不用关注占位符。
  • 不用关注数据类型。

不容易出现问题

C++新特性及输入输出演示小demo

  • 八进制:oct;
  • 十进制:dec;
  • 十六进制:hexl
  • bool类型输出:boolalpha;

mark

c++中默认的i/o类型为十进制;如果不加说明,是无法辨认0,0x开头的八进制和十六进制的。在cin或cout中指明进制类型后,该进制将一直有效,直到再次改变它的进制。

4-C++-hexConvert/main.cpp

#include<iostream>
#include <stdlib.h>
using namespace std;

int main()
{
    cout << "请输入一个整数:" << endl;
    int x = 0; // 随用随定义
    cin >> x;
    cout << "八进制:" << oct << x << endl; // 八进制
    cout << "十进制:" << dec << x << endl; // 十进制
    cout << "十六进制:" << hex << x << endl; // 十六进制

    cout << "请输入一个布尔值(0或1):"<< endl;
    bool y = false;
    cin >> y;
    cout << boolalpha << y << endl; // 布尔类型输出

    system("pause");
    return 0;
}

f5开始调试

mark

c++命名空间(namespace)

什么是命名空间

简言之: 就是为程序划片取名字

mark

namespace区别来自不同的对象的相同名字的函数,为程序划片取名字。

为什么要有命名空间?

mark

A公司和B公司都有小王,那么不指明是哪个公司的小王就会产生不知道是哪个小王。

程序中的命名空间

mark

C公司购买了A和B的程序库,想要使用A的变量x,B公司函数f1怎么办?

A和B就要使用命名空间

命名空间关键字:

namespace A,namespace B

namespace A{
   int x = 0;
   void f1();
   void f2();
}
namespace B{
   int x = 2;
   void f1();
   void f3();
}

要调用命名空间内变量或函数写法(C公司要使用的话):

// 输出A中的变量x
cout << A::x << endl;
// 使用B中的f1
B::f1();

namespace演示代码

  • 正常的system("pause")包含于stdlib.h
#include <stdlib.h>

int main()
{
    system("pause");
    return 0;
}
  • 要引用相应的头文件,还要引用对应的命名空间才可以正常运行。
  1. #include<iostream>

否则报错,cin cout 未声明的标识符

  1. using namespace std;

没有的话依然报错, 未声明的标识符, 因为iostream 中的cin cout在命名空间当中。

#include "stdafx.h"
#include <stdlib.h>
#include<iostream> // cin cout 步骤1

using namespace std; // 步骤2
int main()
{
    cout << "hello" << endl;
    system("pause");
    return 0;
}

模拟A,B公司写代码,C公司使用

主函数为main函数模拟c公司。

4-C++-CompanyABC/main.cpp

#include <stdlib.h>
#include<iostream>

namespace A 
{
    int x = 1;
    void fun()
    {
        std::cout << "A Company function" << std::endl;
    }
}

namespace B
{
    int x = 2;
    void fun()
    {
        std::cout << "B Company function" << std::endl;
    }
    void fun2()
    {
        std::cout << "Only B Have" << std::endl;
    }
}

using namespace B;
int main()
{
    std::cout << A::x << std::endl;
    B::fun();
    fun2(); // using name space B; + fun2(); 等价 B::fun2();
    system("pause");
    return 0;
}

mark

不写using namespace std 时,想要用cin cout的话, 使用std::cin std::cout

章节练习(命名空间)

定义一个命名空间为myNum,在该命名空间中定义一个整型变量x,并给该变量赋值为105;使用C++新特性判断myNum命名空间下的变量是奇数还是偶数。

4-9-C++-namespaceDemo/main.cpp

#include <iostream>
#include <stdlib.h>
using namespace std;

namespace myNum           //填写命名空间的关键字
{
    int x = 105;
}

int main()
{
    // 使用bool类型定义isOdd,作为状态位
    bool   isOdd = false;

    if (myNum::x % 2 == 0)
    {
        //改变状态位的值,使其为false
        isOdd = false;
    }
    else
    {
        //改变状态位的值,使其为true
        isOdd = true;
    }
    // 判断状态位的值
    if (isOdd)
    {
        // 如果状态位的值为true,则打印变量x是奇数
        cout << myNum::x << "是奇数"<<endl;
    }
    else
    {
        // 如果状态位的值为false,则打印变量x是偶数
        cout << myNum::x << "是偶数"<<endl;
    }
    system("pause");
    return 0;
}

5-1 综合练习

  • 知识点:bool类型 命名空间 输入输出。

使用一个函数找出一个整型数组中的最大值最小值。

5-1-c++-boolNamespaceCinCout/main.cpp

一个函数, 传入整型数组,求最大最小值

/********************************************************/
/*知识点:bool类型 命名空间 输入输出                      */
/*题目要求:                                             */
/*        使用一个函数找出一个整型数组中的最大值最小值。    */
/*******************************************************/
#include <stdlib.h>
#include <iostream>

namespace CompA
{
    int getMaxOrMin(int *arr, int count, bool isMax)
    // 数组,数组元素个数,最大还是最小(True 最大,False最小)
    {
        int temp = arr[0]; 
        // 先拿到整个数组中的第一个元素,一旦发现比它大的,就把刚发现的赋值给它
        for (int i = 1; i < count; i++)
        // 经典写法int i=0; i < count; 既然我们已经把第0个取了,我们可以从第一个开始比
        {
            if (isMax)
            {
                if (temp < arr[i]) {
                    temp = arr[i];
                }
            }
            else
            {
                if (temp > arr[i]) {
                    temp = arr[i];
                }
            }

        }

        return temp;
    }
}


int main(void)
{
    int arr1[4] = { 3,5,1,7 };
    bool isMax = false; // 与形参区别开
    std::cout << "您想要求数组{3,5,1,7}最大值还是最小值?(0最小,1最大)" << endl;
    std::cin >> isMax;
    std::cout << CompA::getMaxOrMin(arr1, 4, isMax) << std::endl;
    system("pause"); // stdlib.h
    return 0;
}

mark

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏有趣的django

1.python简介

简介 1、python语言介绍 python的创始人:Guido Van Rossum 2、python是一门什么样的语言 编程语言主要从以下几个角度进行分类:...

3955
来自专栏葡萄城控件技术团队

C#开发人员应该知道的13件事情

本文讲述了C#开发人员应该了解到的13件事情,希望对C#开发人员有所帮助。 1. 开发过程 开发过程是错误和缺陷开始的地方。使用工具可以帮助你在发布之后,解决掉...

2249
来自专栏彭湖湾的编程世界

【javascript】异步编年史,从“纯回调”到Promise

异步和分块——程序的分块执行 一开始学习javascript的时候, 我对异步的概念一脸懵逼, 因为当时百度了很多文章,但很多各种文章不负责任的把笼统的描述混杂...

2208
来自专栏决胜机器学习

设计模式专题(五)——工厂方法模式

设计模式专题(五)——工厂方法模式 (原创内容,转载请注明来源,谢谢) 一、概述 1、工厂方法与简单工厂模式区别 工厂方法模式与简单工厂模式不同 简单工厂模...

3869
来自专栏西枫里博客

Ajax处理success回调函数返回的json数据。

站长最近在项目中用调用一个分类的子数据,由于表单要填写的数据较多,为了实现无刷新的选择操作,就使用ajax做了异步查询。查询的结果因为是多条数据,一直以来动用a...

1612
来自专栏Golang语言社区

十条有用的 Golang语言 技术

十条有用的 Go 技术 这里是我过去几年中编写的大量 Go 代码的经验总结而来的自己的最佳实践。我相信它们具有弹性的。这里的弹性是指: 某个应用需要适配一个灵...

3756
来自专栏Golang语言社区

十条有用的 Golang语言 技术

十条有用的 Go 技术 这里是我过去几年中编写的大量 Go 代码的经验总结而来的自己的最佳实践。我相信它们具有弹性的。这里的弹性是指: 某个应用需要适配一个灵...

4169
来自专栏FreeBuf

逆向工厂(二):静态分析技术

* 本文原创作者:追影人,本文属FreeBuf原创奖励计划,未经许可禁止转载 前言 [逆向工厂]第一章节中介绍了逆向技术的相关基础知识,其中提到逆向的两种形式:...

4528
来自专栏新智元

Go 2.0发布在即,程序员有太多话要说

Go语言的开发者正着手准备开发2.0版本,并从以下三个方面发布了初步的设计方案(非官方正式版),以供社区开展讨论:

7071
来自专栏python学习路

二、Python介绍

Python 是一门什么样的语言? python是一门动态解释性的强类型定义语言。 编程语言主要从以下几个角度为进行分类,编译型和解释型、静态语言和动态语言、...

3684

扫码关注云+社区

领取腾讯云代金券