C++基础与深度解析第一二章笔记:C++初探(深蓝笔记)


前言

深蓝学院c++基础与深度解析第一章第二章:c++基础和初探笔记。


一、系统I/O

1.库的调用

标准库调用:#include <iostream>
在本项目中自己创建的库调用:#include "头文件名"

2.函数的调用

名字空间用于防止名称冲突

名字空间

std是c++的一个标准库中所定义的名字空间,可使用如下两种形式调用:

第一种:(域解析符)

std::

第二种:(名字空间别名)

using namespace std

可以把本项目中名字空间(文件代码)下的函数拿过来使用,就不怕两个文件中有相同名字的函数但执行不同功能。

namespace NameSpace1
{
	void fun()
	{}
}

namespace NameSpace2
{
	void fun()
	{}
}

int main()
{
	NameSpace1::fun();
}

此时可以看到主函数中是使用了域解析符来调用了NameSpace1中的fun()。

注意:不能直接就调用fun(),因为在没有指明名字空间时调用函数,默认是调用的全局空间中的函数,而全局空间中并没有定义fun()函数。如下面就会报错:

int main()
{
	void fun()
}

当然也可以使用名字空间别名,这样主函数中既能看到主函数中的函数调用,也能看到你所制定名字空间中的函数,如下:

int main()
{
	using namespace NameSpace1;
	fun()
}

此时的fun()就是NameSpace1中的fun()函数。

当然,如果觉得NameSpace1这个名字太长,也可以给它重赋一个名字来在主函数中调用:

int main()
{
	namespace ns1 = Namespace1;
	ns1::fun()
}

这里就是将NameSpace1重命名为了ns1

也可以将using namespace … 放到主函数外面,那从写这一句开始下面所有的都是服从该名字空间中语法和函数的,所以这种方法并不是很推荐,因为这样又有可能造成调用冲突的情况发生。
尤其是当你在头文件中使用了这种方法,然后你在另一个cpp文件中调用了这个头文件,那么你的整个cpp文件都会使用这个名字空间的语法,更加容易名字空间冲突还不方便查找哪里冲突了。

由于c++出自c语言,所以在c++中自然也可以调用一些c中的库,比如使用:

#include <cstdio>

int main()
{
	int x = 10;
	printf("I have %d pens /n", x)
}

这里就用到了c的printf。

二、猜数字与控制流

1.if 语句

if 语句用于分治选择

  • 条件部分:用于判断是否执行
  • 语句部分:要执行的操作

图片源自李伟老师课件

假设我们有一个数字10,现在需要大家来猜,如果猜到10 给一个提示,没猜到给另外一个提示

int main()
{
    int x = 10;
    std::cout << "Please input a number:\n";

    int y = 0;
    std::cin >> y;
    if (y == 10)
    {
        std::cout << "You are right!\n";
    }
    else
    {
        std::cout << "You are wrong!\n";
    }
}

2.== 与 = 操作

  • == 操作:用于判断两个值是否相等

如上方猜数字的代码中if的条件:y == 10,这里相当于将10赋值给y,用于判断这两个量为相等的量。

  • = 操作:用于赋值,将数值保存在变量所对应的内存中
    如果将条件语句改为y = 10
    则无论你输入什么值,他最后都会返回“You are right!”,因为使用单个的等于号相当于让这条语句变成了一个布尔值,(规定:=0返回False,其他数返回True
    那么,相反的,根据c++的语法规定,若将上面条件语句改为 y = 0则无论你输入什么,它最终都会返回“You are wrong!”

  • 解决问题
    我们可以养成一个习惯:将常量放在 == 左边以防止误用
    如这里我们可以写成10 == y,这个和y == 10是等价的
    而当我们不小心只写了一个等号时(10 = y)系统会直接报错error: lvalue required as left operand of assignment,这样就能提醒你改过来了。因为10是一个常数,不能作为左值,即放在等号左边

3.while语句

while 语句:用于循环执行
– 条件部分:用于判断是否执行
– 语句部分:要执行的操作
图片来源于李伟老师课件

猜数字改进,若输入的不对,程序会继续让你输入,指导输对了为止。

int main()
{
    int x = 10;
    int y = 0;
    while(x != y)
    {
        std::cout <<"please input a number: \n";
        std::cin >> y;
    }
}

三、结构体与自定义数据类型

结构体:将相关的数据放置在一起

像 int x;float y等等这样的被称为数据,但是单独调用的话, 其结构性,内聚性不强,可以这样:

(1)可以通过点操作符( . )访问内部元素

像 int x;float y等等这样的被称为数据,但是单独调用的话, 其结构性,内聚性不强,可以这样:

struct Point
{
	int x;
	int y;
}

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

(2)可以作为函数的输入参数或返回类型

如下:

struct Point
{
    int x;
    int y;
};

Point fun(Point p)
{
    p.x = p.x +1;
    return p;
}

int main()
{
    Point p;
    p.x = 3;
    p.y = 5;
    p = fun(p);
    std::cout << p.x << ' ' << p.y << '\n';
}

(3)可以引入成员函数,更好地表示函数与数据的相关性

struct Point
{
    int x;
    int y;

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

int main()
{
    Point p;
    p.x = 3;
    p.y = 5;
    p.IncX();
    std::cout << p.x << ' ' << p.y << '\n';
}

这里通过将函数IncX()引入结构体Point内部,提现了更好的相关性。
这样的做法更像是在构建一个类,这是c++与c的根本区别

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值