C++ 基础与深度分析 Chapter1 C++初探(系统I/O、控制流、结构体和自定义数据类型)


在这里插入图片描述

从Hello World谈起

在这里插入图片描述

#include <iostream>

int main()
{
    std::cout << "Hello world" << std::endl;
}
#include <iostream>

void fun(const char* pInfo)
{
    std::cout << pInfo << std::endl;
}

int main()
{
    fun("Hello world");
    fun("Hello China");
}

函数可以被反复调用。
void表示这个fun函数,不需要任何的返回值。

main是一个非常特殊的函数,它是由系统进行调用的,是整个程序的入口,main通过函数名调用不同的函数。c++必须有一个main,底层操作系统调用c++,最开始调用的函数就是main。main的返回值会返回操作系统。为什么要有返回值,一个程序运行可能会出错,我们要通过返回值看是否成功。0表示是否成功。不成功,会有各种各样的问题,成功就返回0.
c++如果不是void的函数,必须要返回相应的类型。main例外,如果不写return,默认返回0.
main函数的返回类型一定是int。其他函数返回类型是千差万别的。
另一种写法
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
语句块
在这里插入图片描述
在这里插入图片描述
告诉读者,这个形参作为一个占位符。
形参(形式参数)列表:函数名后面的()内容。

系统 I/O

include,既可以使用<>,也可以使用"“。区别在于”“,系统会在当前目录下去查找头文件。如果用的是<>,系统会从整个的操作系统的环境变量中的库去找。如果是我们工程自己写的头文件,我们用”",一些cpp标准库提供的,我们使用<>。自己的头文件,一般有后缀.h等。标准库一般没有后缀。
在这里插入图片描述
cin中的c:character。
输入流有1个,输出流有很多个。
输入流用户通过键盘输入,输出通常是输出到屏幕上。

int main()
{
    int x;
    std::cout << "How old are you:";
    std::cin >> x;
    std::cout << "You are " << x;
}

cerr和clog的区别在于是否立即刷新缓冲区。一个个字符输出效率比较低,所以一般会先输出到缓冲区,一个缓冲区一般包括64k或者多少个字节。当缓冲区满了的时候,我们会一次性的将内容输出到屏幕或者文件。如果程序中有bug,又没有及时刷新缓冲区,那么我们就无法精确定位到哪里出了问题。所以虽然刷新缓冲区会降低效率,但是我们还是希望及时的刷新缓冲区。
cerr是立即刷新缓冲区(是自动的),clog不是立即刷新。如果我们自己是手动操作刷新缓冲区,需要使用std::flush或者std::endl(加入了自动换行).
通常情况,只有在必要的时候,使用endl。

名字空间,防止名字冲突。

#include <iostream>

// function
/* 
klsjfkjsd 
lksdjflkdsj
sldkjfsdl
*/
namespace NameSpace1 
{
    void fun()
    { }
}
namespace NameSpace2
{
    void fun()
    { }
}

int main()
{
    NameSpace1::fun();
    NameSpace2::fun();
}
int main()
{
    using namespace NameSpace1;
    fun();
}
int main()
{
    namespace ns1 = NameSpace1;
    ns1::fun();
}

我们可以通过namespace自己定义一些名字空间。std是cpp标准的名字空间,标准库。
在这里插入图片描述
名称改变name mangling。
在这里插入图片描述
filt -t。是demangling。解改变。

#include <iostream>
int main(int argc, char const *argv[])
{
    /* code */
    std::cout << "Hello Wei" << std::endl;
    int x = 1;
    printf("I have %d cat\n", x);
    return 0;
}

在这里插入图片描述

猜数字与控制流

在这里插入图片描述

#include <iostream>
int main(int argc, char const *argv[])
{
    int x = 42;
    std::cout << "Please input a number:" << std::endl;

    int y = 0;
    std::cin >> y;

    if (y == 42)
    {
        std::cout << "Right" << std::endl;
    }
    else
    {
        std::cout << "Wrong" << std::endl;
    }
    
}

左值是可以放在等号左边的,右值是放在等号右边的。
在这里插入图片描述
42是一个常量,不能做左值。y是一个变量,是一个右值。
在这里插入图片描述
在这里插入图片描述

#include <iostream>
int main(int argc, char const *argv[])
{
    int x = 42;
    int y = 0;
    while (x != y)
    {
        std::cout << "Please input a number : " << std::endl;
        std::cin >> y;
    }
    
}

在这里插入图片描述

#include <iostream>
int main(int argc, char const *argv[])
{
    int x = 42;
    int y = 0;
    while (true)
    {
        std::cout << "Please input a number : " << std::endl;
        std::cin >> y;
        if (x == y)
        {
            std::cout << "Right" << std::endl;
            break;
        }
    }
    
}

结构体与自定义数据类型

在这里插入图片描述

#include <iostream>
struct Point
{
    /* data */
    int x;
    int y;
};

void fun(Point p)
{
    p.x;
    p.y;
}

int main(int argc, char const *argv[])
{
    Point p;
    p.x;
    p.y;
}


使用Point表示一个点,比传入fun(x,y)有更清晰的表达。通过.操作元素。

#include <iostream>
struct Point
{
    /* data */
    int x;
    int y;

    void IncX()
    {
        x += 2;
    }
};



int main(int argc, char const *argv[])
{
    Point p;
    p.x = 10;
    p.IncX();
    std::cout << p.x << " " << p.y << std::endl;
}

将函数引入struct,更像是一个类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值