[06.12] C++ Primer Plus 学习笔记

写在前面:在近期会发布较多的学习笔记,记录个人学习新语言的心得,文章中有不妥之处,还望交流指正

目录

了解C++

一、了解IDE

       1)与其它语言的区别

        2)输出语句cout详解

        3)C++源码格式化

        4)变量的声明与赋值

        5)输入语句cin详解

        6)函数详解


了解C++

一、了解IDE

       1)与其它语言的区别

        1.C++编译时对大小写敏感,区分大小写,在关键字的使用时需要注意

        2.C++必须要包含一个名为main()的函数(此处小写),函数头作为接口,从int main()开始

        3.cpp文件的执行通常从main()开始

        4.输出与输入语句为coutcin

        5.C++对一些老式头文件作了重新命名,去掉了扩展名h,并在文件名前添加了前缀c(方便多平台使用时不报错,且可使用一些C不具备的特性,例如使用名称空间using namespace std)

老版:

#include <math.h>

新版:

#include <cmath>

        2)输出语句cout详解

       在了解输出语句前,先得对这行代码有初步认识:

#include <iostream>

        其中io表示IN/OUT,即输入输出,include语句在cpp执行时预处理了iostream文件,将其加载到了我们的cpp中,从而让我们能够使用输出变量cout和输入变量cin

        而形如下列的代码,则是对名称空间的使用:

using namespace std;

        名称空间的定义是为了区分不同的已封装好产品的同名函数,此处采取书上的例子:如果Microflop和Piscine公司都使用了同名的wanda()函数,编译器将不知道是哪个版本,这时候可以使用名称空间将它们区分开来:

using namespace Microflop;
using namespace Piscine;

        这样wanda()函数的全称就为Microflop::wanda()Piscine::wanda(),从而可以进行区分
 

Microflop::wanda("Hello World");
Piscine::wanda("Hello Wuhan");

        在这种方式下,函数对象是C++编译器的标准组件,都被放在名称空间std下,仅当头文件名没有.h时,情况才是如此

        因此可以知道在iostream中定义的用于输出的变量cout和用于输入的变量cin的全称为std::coutstd::cin,当省略using语句时,则可以用全称进行编码

        cout是C++中的一个预定义的对象,知道如何显示字符串、数字和单个字符等。相比于C的printf(),不用担心%s,%d输出类型打错后导致的乱码,这得益于插入运算符<<的使用,插入运算符表明了信息流动的方向,如下:

using namespace std;
cout<<"Hello World";

        对输出的理解是,输出是一个流,是从程序流出的一系列字符,cout对象表示这种流。<<表明了将右侧信息插入到左侧的输出流

        值得一提的是,<<识别右侧的数据类型,进行智能化输出,在后文变量的有关内容中会提及

        在实际使用中,也会遇到这样的输出:

using namespace std;
cout<<"Hello World"<<endl;

        打印字符时,cout不会自动移到下一行,而上面代码中的endl是控制符,起到的作用是重启一行,会使屏幕光标移到下一行的开头。它的定义也是来自于头文件iostream,全称是std::endl,相比于C中的\nendl保证在程序继续运行前刷新输出(立即显示在屏幕上),而\n不能提供这样的保证,也意味着在某些系统中,在输入信息后才会出现提示

        cout同时支持拼接输入,如下:

using namespace std;
cout<<"Hello "<<"W"<<"orld";
cout<<"Hello World";

        两行代码的输出内容是一样的

        鉴于不输入endl不会进行换行,而是接在上一次输出的结尾接着输出的特点,如下语句也能达成上面代码的输出:

using namespace std;
cout<<"Hello";
cout<<" ";
cout<<"World";

        3)C++源码格式化

                C++中分号标示了一行的结尾,这点跟java一致,也说明了在C++中,回车的作用跟空格制表符相同,一行语句可以分几行实现,如下:

    using
namespace std; cout
    <<
"Hello World"
;

        此处仅说明代码有效,方便阅读他人代码,笔者个人不推荐在实际应用中采取如上形式的代码。

        补充之处在于C++源代码中与函数名称相关的圆括号周围没有空白

        4)变量的声明与赋值

        定义变量都不陌生,此处补充的只是底层逻辑,如下:

int sum;

        int表明了创建的变量类型为整型,诸如此类的声明还有doublefloatcharstring,当程序执行到这一条语句时,通过读取int,知道需要的空间大小为一个整型,从而会为这个变量分配足够大小的内存空间来存储这样一个整数,读取到sum时,会给存储单元指定名称,用sum来标识存储在该内存单元中的值。变量意味着值能进行修改,在C++中,所有变量必须声明。

        C++的变量声明分为两种:定义声明(defining declaration)、引用声明(reference declaration)

        上面代码中使用的是前者,即定义声明——在程序中直接声明。

        C++的赋值运算符采用的是=    即将等式右边的值赋值给左边,特殊之处在于可以连续使用赋值运算符,如下:

int a;
int b;
int c;
a=b=c=99;

        赋值的进行是先将99赋值给c,再给b,再给a,过程应该是易于理解的

        变量的加减与其它IDE并无明显区别,此处不过多赘述

        补充前文提到的<<智能化识别,<<在C中,也是移位运算符,而它也可在C++中作插入运算符使用,这种我们称之为重载运算符,其功能会结合代码执行的内容和上下文而采取移位/插入操作,而<<在插入操作时,对右侧的内容其实会进行智能化识别,如下:

        

using namespace std;
int sum=99;
cout<<sum;

        输出结果将是99,但此时的99其实是字符串,即<<识别到右侧的int数据后根据输出的要求,将二进制内容的整数转化为了对应的字符'9'和'9'并拼接起来形成“99”,再进行的输出,cout能够识别类型的功能表明,其设计更灵活,同时,它是可扩展的,即可重新定义<<运算符,使cout能够识别和显示新开发的数据类型

        5)输入语句cin详解

        C++的输入语句是cin,用法如下:

using namespace std;
int sum;
cin>>sum;

        其中,>>表明了信息流动的方向,表明将输入流传到了变量sum

        与cout一样,cin也是智能对象,可以识别键盘输入的字符串,转换为>>右侧变量能够接受的形式

        6)函数详解

        C++中除了必备的函数main()外,使用函数除了库函数外,用户定义的函数需要在main()前提供其原型,在main()后提供源代码,如下:

#include <iostream>
void target(int);

int main()
{
    using namespace std;
    target(6);
    int newtarget;
    cin>>newtarget;
    target(newtarget);
    cout<<"done"<<endl;
    return 0
}

void target(int n)
{
    using namespace std;
    cout<<"your target is "<<n<<",keep going!"<<endl;
}

        其中include下面一行的void target原型,括号中声明了参数类型,而main()后面的void target(int n)源代码,展示了具体的实现内容

        在上面的代码中需要注意的部分有:

        1.void的使用:void意味着不接受参数,在函数类型前面声明意味着无需返回值,在函数类型后的括号中声明意味着不接受任何参数,如下:

void status(int n)
{
    statement;
}            //无需返回值
status(6);

int state(void)
{
    statement;
    return 0;
}        //无需任何参数
int sum=state();

        无需返回值的函数结尾不需要带上return语句,这类函数也被称为过程(procedure),也因为其不返回值,所以无法用在赋值语句或其它表达式中

        在C++中需注意,即使函数调用中不需要参数,在调用时也需要加上括号,如上面代码中的state();

        2.namespace的使用:在上列代码中,每个函数中都using了一次namespace,有没有方法能避免这种重复呢?方法就是在最初的函数头中using即可,如下:

#include <iostream>
using namespace std;
void target(int);

        需要注意的是,using namespace std时会使用std名称空间下的所有名称可用,在大型工程文件中可能会是潜在问题,所以建议仅使我们所需的名称可用,如下:

using std::cout;
using std::cin;
using std::endl;

        用这些指令替代using namespace std;便可以使用cincout而不用加上std::

        3.return的用法

        return 0 在函数中意味着函数无故障顺利执行,这里的返回值也可以作修改,如:

int KmToM(int n)
{
    int meter=n*1000;
    return meter;
}

        如上的千米到米的转化函数,可以return变量meter的值,也可以进行如下实现:

int KmToM(int n)
{
    return n*1000;
}

        输出结果也是一致的,唯一需要注意的是两个方面:参数类型需要是整型,返回时的输出需要是整型,这取决于我们最初的函数定义

        相比之下,第一个函数的实现将计算返回分开了,更有利于修改

     

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值