c++ primer plus 第6版

c++ primer plus 第6版

 源代码 ---编译器---目标代码---连接程序(启动代码--库代码)---可执行代码

 源代码扩展名:c   cc   cxx     C    cpp    c++     

 编译和链接:unix          CC   **.c         ------》**.o     -----》a.out    

        linux  g++  **.cxx     需要链接库时的命令:g++   **.cxx -lg++;多个文件的编译   g++  1.cxx    2.cxx中如果修改了1.cxx则编译时需要的命令

          g++ 1.cxx  2.o   将重新编译的1.o与2.o重新链接。   

      参照linux或unix 中man帮助 编译器的命令手册

 

      当ide中执行完程序后马上  关闭窗口,可以在程序源代码的后面加上  

        cin.get();\\加入状态    读取下一次键击    等待  直到按下enter按键

        cin.get();

        return 0;

第2章

    1.区分大小写

    2.    #include <iostream>    添加的预处理的文件

      using namespace std;  

       cout<< endl;       开始一个新行

    3.在return 之前   加上cin.get();    一致开着窗口不关闭

    4.预处理器编译指令#include

    5.编译指令   using namespace

    6.函数头部    c++使用    int   mian (void)这种用法   void  指出不接受任何参数

    7.注释    //单行    多行用/*   */

    8.预编译  将#后面的命令   预编译    例如iostream   将ioistream的内容编译后替换#后面的内容 与编写大代码文件组合成一个复合文件。

    9.上面iostream   如果在c中需要有.h的后缀  但是在c++ 中如果使用c中的老式头文件  仍然可以使用.h的扩展名   但是有些文件都去掉了.h扩展名  并且在文件名称的前面加上前缀c   表示来自c语言的头文件库。例如c++中使用math.h为cmath      这种变化对包含命名空间有用。

    

     10名称空间

      如果使用iostream   而不是iostream.h   则应该使用命名空间编译指令来使用iostream中的定义对程序可用    using namespace std;

      这叫using编译指令    名称空间主要用来在大程序中将多个厂商的现有代码组合时,来组织程序。

      大概的意思就是  a公司的代码  wo()函数      和b公司的代码中的wo()  函数,这两个函数同时封装到一个叫做名称空间的单元中,此时a公司的wo()函数在空间中被标记为a::wo()    而b公司的代码为b::wo();     以此来区分不同的函数或者版本

    仅仅当头文件中没有.h的时候    才是上面的情况

     按照c++的标准组件,他们都被放置到名称空间std中。     所以调用的时候通常是std::cout      std::endl

      可以省略掉using

      即    std:: cout<<*******

         std::cout<<std::endl;  

      这样用起来比较繁琐   所以使用using namespace std   即可  ,而不必使用std::前缀

       using编译指令使得std 名称空间中的所有名称都可用。

      当然严谨一些  只使用所需的名称即可。用using声明来实现

      using  std::cout  仅仅使用cout即可  而不必使用std::cout

      using std::endl

      using   std::cin

      11.   cout 的输出

        <<   表示将后面的双引号中的字符串发送给cout函数

        cout对象表示输出流   (程序中流出的一些列字符),其属性是在iostream文件中的定义的。cout的对象属性包括一个插入运算符 <<     ,它可以将其右侧的信息插入到流中。

      例如   cout<<"fuck";    理解为将字符串fuck   插入到输出流中。

        

      12.运算符的重载

        以上面的<<为例 在c中   此符为左移运算符  <<     在c++中则是左移运算符     此为运算符重载   导致的不同的运算符有不同的含义。

        c本身也有运算符重载的情况    &即表示地址运算符   也表示按位and的运算符

        *既表示乘法   有表示指针解除引用      编译器如何判断意义呢:答案就是根据上下文的含义来确定。

        1.endl     重启一行    导致屏幕的光标移动到下一行的开头。

          例如endl的一些对于cout来说有特殊含义的特殊符号被称为控制符。    在iostream中定义   且位于名称空间std中

          如果没有换行符   则下一个cout的字符串的输出会紧跟在上一个cout的输出的末尾。

        2.换行符    

          c中的旧式  换行符号   \n

          cout<<"*****\n";    此为换行符

          \n和endl的区别:endl   可以确保程序继续运行前刷新输出  即在屏幕上立即显示

                  \n则不能如此

          有时候    在有些系统中   在您输入信息后才会出现提示

      13   c++ 源代码的格式化

          以分号分割每一条语句    而不是回车符或其他符号

        1.代码中的标记和空白

          一行代码中不可分割的元素叫做标记     多个标记用空格   制表符或回车分开,这些都称为空白

          括号和逗号等不需要空白分开。

      14.c++语句

        c++程序是一组函数    每个函数又是一组语句。

          声明语句创建变量

          赋值语句给该变量提供一个值。

        1.声明语句和变量

          指出信息的存储位置和所需要的内存空间      使用声明语句来指出存储类型并提供位置标签。

          int  carrots;

          指出空间为一个整数的存储空间   和编译器负责分配一个整数大小的内存空间给变量carrots这个变量并标记。

          c++可以在首次使用变量之前声明   ,不必非在程序的开始部分声明,当然在开始位置声明更好。

        2.赋值语句

          将数值赋值给内存单元

           c++的特性和c不同的地方   可以连续使用赋值运算符 例如   :   a=b=c=3;

            赋值从右向左进行。首先3给c   c给b    b的值再给a

        3.cout的新花样

          cout <<a;    如果a的值为1    则    输出值为1

            做了两步   1.cout先将a的值替换为当前的值1        2.将数值1转换为何时的字符输出

          cout 可以用于数值和字符串

             如果定义字符串“25”    则字符串存储的是书写该数字时使用的字符。即字符3和8     程序的内部存储的是字符3和字符8的编码    如果要打印字符串,则cout仅仅打印各个字符即可。

            如果定义的数值是整数25    则将25转换为二进制数存储在内存单元中。   打印之前cout需要将整数形式的数字转换为字符形式的数字再打印  例如itoa()函数的功能     atoi()的功能是将asc码转换为对应的数字。

          cout   后面的<<插入运算符将根据其后的数据类型相应地调整其行为。运算符重载。

          cout  可以扩展    extensible    用户可以自定义<<的运算符,,使其能够识别和显示所开发的新的数据类型。

       15.其他的c++语句

         cin   与cout对应的  要求输入的对象

          cin>>a;     

          将键盘输入的值赋值为a   

          如果程序中要求添加cin.get()    则需要添加两条这样的语句   cin.get();

         第一条获取数值      第二条让程序停止   直到输入enter键

           cout<<"now you have"<<a<<"adsjfo0uo"<<endl;

          组合输出

          15.1  使用cin

           将键盘上的值赋给变量a

                  cin>>a;

           信息从cin流向a       c++将输入看做是流入程序的字符流。

           iostream  文件将cin定义为一个表示这种流的对象。输入时,cin使用>>运算符从输入流中抽取字符,通常需要在运算符右侧提供一个变量,以接受 抽取的信息(符号<<和》》被选择用来指示信息流的方向。)

           cin也是智能对象    如果a  为整形变量     则输入的就被cin转换为计算机用来存储整数的数字形式。

           15.2  cout进行拼接   cout<<a<<b<<c;   拼接 输出

                也可以cout  <<a;

                      <<b;

                      <<c;

           15.3类简介

              类为用户定义的一种数据类型     oop对象编程。

            cout   和cin   是一个ostream类对象   此类(iostream文件的另一个成员)描述了ostream对象表示的数据以及可以对它执行的操作,如将数字或字符串插入到输出流中。同样cin是一个istream类的对象,在iostream中定义。

        像函数来自于函数库    类也可以来自类库    ostream和istream类就属于这种情况。这些类并没有内置到c++语言中,而是语言标准指定的类。这些类定义位于iostream文件中。没有被内置到编译器中。多数实现都在软件包中提供了其他类的定义。事实上   c++的优势就是由于存在大量支持 unix    winodws 和mac编程的类库。

      要对特定对象执行这些允许的操作,需要给该对象发送一条消息,例如告诉cout对象   要显示一个字符串

      传递消息的方式:1是使用类方法   实际上就是函数调用   2是重新定义运算符。

        cout<<"fuck";    就是使用了第2种方法。

   16  函数

      函数分两种    有返回值  和无返回值

      1.有返回值

        使用函数之前    编译器需要知道函数的参数类型和返回值得类型   

        c++ 程序应当为程序中使用的每个函数提供原型

      函数原型对于函数  就像变量声明对于变量     指出涉及的类型    仅仅描述函数接口   并非函数定义(描述函数的实现的代码)

        例如   函数sqrt函数定义为可能带小数部分的数字   并返回一个相同类型的数字,c++将这种类型称为double    

        原型为    double   sqrt(double);

            第一个double   指出返回值的类型       括号中的指出参数的类型   上面带有分号   所以说明是一个原型   而不是函数头

      如果是函数头 没有分号   则编译器就会将其解释为一个函数头     并要求提供定义该函数的函数体。

        使用sqrt()时    需要提供原型

          两种方法:    在源代码文件中输入函数原型

                包含头文件 cmath  (即c中的math.h)    其中定义了函数的原型    推荐此方法

        

        库文件包含函数的编译代码     而头文件中包含了原型

        如果是老式的编译器    需要使用math.h   而不是cmath

        

        库函数的使用

           c++库函数存储在库文件中     使用时  需要在库文件中搜索您使用的函数   如果提示一个没有定义的外部函数   则有可能是编译器不能自动搜索函数所在的库。

    如果出现这种情况    在unix中  则需要使用-lm选项  以搜索    CC sqrt.C -lm

      在linux中    g++  sqrt.C -lm

      只包含头文件  仅可提供原型,但是不一定会导致编译器搜索正确的库文件

      type-name   variable-name;

      double类型使得变量area和side能够存储带小数的值

        函数变体

          多个参数    answer=pow(5.0,8.0);

          无参数  myguess=rand();rand 不接受任何参数

          无返回值     void  bucks(double);   所有此函数不能用于赋值语句的右侧   或其他表达式中

        

      用户定义的函数

        函数原型放到main函数之前   源代码放在main函数的后面

        函数的格式

          type  functionname(argumentlist)    此为函数头

            {

            statements                          此为函数体

          }

        

        

       用户定义的有返回值的函数

         

        

        通常在一个简单敞亮的地方   都可以使用一个返回值类型与该常亮相同的函数       

        例如int aunt=stonetolb(10);

          int aounts=aunt+stonetolb(10);

          cout<<"adsfasdf"<<stonetolb(16)<<"adsf"<<endl;

        总结  函数原型描述了函数的接口,即函数如何与程序的其他部分交互

           参数列表指出何种信息被传递给函数

           函数类型  指出返回值的类型  

          见上图。

        

          程序案例

            #include <iostream>

            int stonetolb(int);      

            int main()

              {

                using namespace  std;

                int stone;

                cout<<"adsfasdf";

                 cin>>stone;

                int pounds=stonetolb(stone);

                cout<<stone<<"stone=";

                cout<<pounds<<"pounds."<<endl;

                return 0;

   

              }

              int stonetolib(int sts)

              {

                return 14*sts;

                /*

                  int pounds=14*sts;

                  return pounds;

                  */

            }

           stonetolb()  包含全部的函数特性

            有函数头和函数体

            接受一个参数

            返回一个值

            需要一个原型

          

    在多函数程序中使用using编译指令

      using  namespace  std      

      因为每个函数都使用cout   所以需要能够访问位于名称空间std中的cout定义

      using编译指令可以位于函数的外部    也可以位于函数的内部

      例如 1.  所有函数都需要访问std  空间

          所以using编译指令需要在所有函数的外面

          #include <iostream>

           using namespace std;  //编译指令

            void A(int);//A函数的原型

            int  B(int);//B函数的原型

            int main()

              {  cout<<"adsfasdf";     //使用std命名空间中的cout

              }

            void A(int n){    cout<<"adsflkajsljll!";}    A函数头和函数体

            INT B(int n){  cout <<"adsfadsf";}

      

         2.

        

            

      

猜你喜欢

转载自www.cnblogs.com/dongguolei/p/9120004.html