c++速成,适合有c基础的朋友(1)

1.C++程序的整体布局
#include<iostream>      //"<iostream>"中不能有多余的空格
using nameplace std     //此处c++特有,c没有。另一种写法是将上述两行写为 #include <iostream.h>,对应较老的版本。如果编译器要求这样的写法可以考虑
int main()              //(接上一行)升级编译器。
{
  <语句块>;
   return 0;
}
c++的注释方式与c相同,对缩进的要求并不像python那样严格。好的缩进习惯可以提高程序的可读性,是应该养成的好习惯。

2.c++基础知识
  a.变量和赋值   c++对大小写敏感
    此部分与c类次,在此不赘述。在此提醒,变量名尽量起有意义的名称,这样有助于编程,编程时养成写注释的习惯。
  b.输入与输出
  %1.使用cout进行输出:
    eg:cout << number_of_stu << "bedrooms\n"; //可以输出number_of_stu变量的值以及后面的引号中的内容。
    等价于:
        cout << number_of_stu;
        cout << "bedrooms\n";
    cout语句中也可以包含表达式,表达式要用“()”括起来。
    eg: cout << "the total cost is" << (price+tax);
    如果cout语句过长可以变为两行。
    eg:cout << "there is" << number_of_bed
            <<  "beds and" << number_of_table << "tables in the room\n";
   %2.转义序列:
     使用\来告诉编译器:\后面的符号需要转义,或者消除转义字符默认的意义,只是单纯的显示字符。
     常用的转义字符:/n 换行符(endl含义相同)
                   /t 制表符(跳跃空格)
     编程时可以考虑以"/n"来结束,避免下一个程序的输出与这个程序混在一起。
   %3.格式化带小数点的数字:
    在程序中加入下列指令:
    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);
    就可以输出2位小数点的小数。      
   %4.用cin进行输入:与cout用法类似:
      eg:cout << "Please enter your age:\n";
         cin >> age;
      可以从键盘输入两个变量,用空格隔开:
      eg:cin >> number >> size ;
  c.数据类型和表达式
   %1.short / int / long / float / double / long double / char  与c相似,不再赘述。
      其中需要注意的是,char类型指的是键盘上的任意一个单字符。要用''来表示。'a'与"a"是不一样的,后者为string类,不能用char类型来表示。
      编程时涉及到除法运算最好使用float型避免出错。
      另外与c不相同的是,声明时可以采用两种方式。 int num=1;  or  int num(1);
   %2 bool类型 只有ture或fales两个值,用于分支语句。
   %3 string类简介:
      想要使用string类,首先要包含string库:
      #include <string>
      变量声明与赋值的方式与之前的类似:
      string sex;
      sex = "female";
      这里允许这样的操作:
      string day;
      day="Monday"+"Tuseday";
      得到的day的值为"MondayTuseday"
    %4 在这里补充一下为常量命名的规则: 使用const关键字
       eg:const int WINDOWS_NUMBER = 10; // 在程序中可以使用名字而不是数字。虽然并未要求常量的命名必须大写,但这已经成为大部分程序员的习惯。
  d.简单的控制流程
   %1.一个简单的分支机制:
     if(Boolean_Expression)    //涉及到"&&","||"的使用时注意括号的使用。注意"="与"=="的应用差别。
     {
        Yes_Statement_1;
        Yes_Statement_2;
        ...
     }
     else
     {
        No_Statement_1;
        No_Statement_2;
        ...
     }此部分与c语言基本相同。
    %2.简单的循环机制
     while循环:
      while(Boolean_Expression)   //当Boolean_Expression的值为false时结束循环,注意这里没有分号。
      {
             statement_1;
             statement_2;
             ...
      }
     do_while 循环:   适用于循环体一定要执行一次的场合,不太常见。
      do
      {
             statement_1;
             statement_2;
             ...
      }while(Boolean_Expression); //注意此处的分号
     %3.递增,递减操作符
        n++,n--,++n,--n与c类似。值得注意的是在c++中,它们只能用于单个变量,(x+y)++这种表述是违法的。
     %4.多路分支: 多路分支需要注意的就是"{}"的使用,保证if-else的配对正确。
                  在c++中,{}中的语句被称为一个语句块,块中声明的变量是局部变量。
     %5.多路if-else语句:
        if(Boolean_Expression_1)
           statement_1;
        else if (Boolean_Expression_2)
           statement_2;
        else if (Boolean_Expression_3)
           statement_3;
        ...
        else
           statement_last;
     %6.switch 语句:
        switch(controller_expression)
        {
          case constant_1
             statement_sequence_1;
             break;           //不要忘记break的使用。
          case constant_2
             statement_sequence_2;
             break;
          ...
          default:            //可有可无,最好加上可用于显示相关信息。
            statement_sequence_last;  
        }
     %7.for语句:
         for(intialization_action;boolean_expression;update_action)
                     body_statement;
         eg: for(i=100;i>0;i--)   //此处不要加分号,加分号会使得for(i=100;i>0;i--)单独成为一个语句。
                 count << "there are" << i << "students left in this room\n";
         注意使用break同样可以跳出循环。break只终止包含它的最内层循环。
         使用到嵌套的循环时,同样需要注意内外层之间的关系。
        
3.过程抽象和返回一个值的函数:
  a.预定义函数:   是指c++之前已有定义的函数,存放在相应的头文件中。使用时要声明包含这样的头文件。
        eg:#include <cmath>
           #include <cstdlib>
  b.强制类型转换: 可以使用函数static_cast<double>()函数将int型转换为double型,以保证相应计算的正确。
        eg:candy_per_person=static_cast<double>(total_candy_number)/_of_person;
  c.自定义函数:   
   %1 函数的描述分为两个部分,分别是函数声明和函数定义。函数的声明放在靠前的位置,通常放在main函数之前。
      eg: double total_cost (int number_of_basketball, double price_cost_signal); //注意此处的分号
      其中形参与实参的问题与c一致。
   %2 bool型返回值的函数
      函数可以返回一个bool型的值,声明方式如下:
      bool 函数名(参数表)
      eg:bool app(int race);
      函数体可以是这样的:
      bool app(int race)
      {
           return (race>10);
      }      
      注意调用函数时,实参的顺序不能发生错误。
   %3 局部变量,全局常量和全局变量
      将const int声明的常量放在程序的前端,则声明了全局常量,在任意一个函数中都可以使用。
      将const去掉声明的就是全局变量,全局变量的应用容易导致错误,对于不是很有经验的编程者不建议使用。
      局部变量是在函数内部定义的,只在函数内部有相应的意义。需要强调的一点是,传值调用形参是局部变量,函数内部对变量的直接操作不会影响函数外部的变量
      的值。
   %4 重载函数名称
      c++允许为同一个函数名提供两个或者更多的定义,这表示可以在不同的情况下重用这些名称。为同一个函数名提供两个或者更多的定义,就称为重载函数名称。
      c++的重载简单很多,只要按照一般的函数定义方式在定义一个函数就可以了。重载一个函数名时,两个函数声明的形参必须有所区别,这样编译器才能正确的找到
      相应的函数。只用返回类型不一样是不能重载的。不要为两个不相关的函数重载。

4.所有子任务函数
  a.void 函数
    不返回值的函数称为void函数。
    void函数声明: void Fuction_Name(Parameter_List);
  b.传引用调用形参
    使用传值调用形参,用于替换形参的是实参的值(而不是实参本身)。
    使用一个传引用调用一个形参时,函数调用中的相应的实参必须是一个变量,用于替换形参的将是一个实参变量,是变量本身。
    为了标记一个传引用调用形参,需要在函数声明和函数定义头中,在参数类型后加&。
    eg: void get_input(double& f_variable)
        {
             using namespace std;
             count << "please enter a number:\n";
             cin  >> f_variable ;
        }
    如果希望函数更改一个变量的值,就使用传引用调用,其余的均可以是用传值调用。
  c.使用过程抽象
    过程抽象的原则在于将函数写为一个黑盒子,使用者只需要知道他的使用条件和使用结果,不必对其内部的实现方式有所了解。
    在为函数写注释的时候,分为前条件和后条件是一种好的手段。前条件的内容是使用函数的必要条件,而后条件可以写函数的运行结果。        
  d.测试和调试函数
    可以编写程序一个一个函数的进行测试,这样能较好的定位错误。如果测试时需要另外的函数,而它还未编写或者还未经过测试,可以写一个stub函数占位:
    eg:double price(int number,double cost)      //this is a stub
       {
                return(9.99);
       }
  e.常规的调试技术
    %1.坚决杜绝依靠直觉修改代码以期待改对的心态!!!
    %2.定位错误对于调bug有很大的意义。可以战略性的插入cout函数来帮助确定bug的位置。
    %3.assert宏
       assert宏是确保在assert语句的位置预期条件为true的一条语句。如果条件不服,程序会报错并退出。
       要使用assert宏首先要 #include <cassert>
       使用形式:assert(boolean_expression);
       注:在#include <cassert>之前添加 #define NDEBUG 既可以禁用所有的assert宏。
原文地址:https://www.cnblogs.com/ustczd/p/4781235.html