美文网首页
基本语言

基本语言

作者: eesly_yuan | 来源:发表于2014-09-14 11:56 被阅读38次
变量与基本类型
  • 变量初始化规则
    内置型变量是否自动初始化取决于其定义的位置,定义在函数体外部的都将初始化为0,定义为函数体内部的不进行自动初始化。

类类型初始化,如果未显示提供初始化式,则调用默认构造函数初始化。

  • 定义与声明
    定义为变量分配内存空间,并可以指定初值,声明向程序表明的变量的类型和名字。定义的同时也进行了相应的声明。可以采用extern声明变量名而不定义它。声明可以多次,定义只能一次。

  • 枚举类型
    enum test {A,B,C};

  • 头文件
    头文件为相关的声明提供了一个集中存放的位置,头文件一般包含类的定义、extern变量声明、函数声明、const变量定义等
    #include <标准头文件>
    #include <自定义头文件>

标准库类型
  • 标准库string类型(size()或者下标类型string::size_t)、vector、iterator、bitset类型
数组和指针
  • 数组的类型不能为引用

  • 数组初始化,没有显式的初始化则元素与普通变量一致,内置数据类型函数内部无初始化,外部初始化为0;类类型则调用默认构造函数

  • 数组级别上不能直接复制和赋值

  • 数组下标类型size_t

  • void*可以保存任意类型的指针,const类型除外,需要使用const void*

  • 指针和引用的区别:引用总是指向某个对象,定义引用的时候没有初始化是错误的;赋值行为的差异,给引用赋值是修改其关联对象的值,而不是使引用与另一个对象关联

  • 指针和typedef

typedef string *pstring;
const pstring cstr ;等效于 string * const cstr; 前面那个const是修饰pstring
  • c风格字符串,即末尾有一个结束标志
    表征函数库#include <cstring>提供如下函数
strlen(s)
strcmp(s1,s2)
strcat(s1,s2)
strcpy(s1,s2)
strncat(s1,s2,n)
strncpy(s1,s2,n)

上述函数的调用者必须保证目标字符串有足够的大小
尽可能使用string而不是上述的c风格的字符串

表达式
  • 算术操作符优先级
+(正号)、-(负号)
*、/、%
+、-
  • 关系操作符和逻辑操作符
!
<、<=、>、>=
==、!=
&&
||
  • 位操作符
~
<<、>>
&、^、|
  • 赋值操作符(右结合性)
  • 自增自减操作符
  • 箭头操作符
    (*p).foo 等价于 p->foo !
  • 条件操作符 ?:
  • sizeof操作符,返回类型size_t,单位byte
sizeof(type name)
sizeof expr
sizeof(expr)
  • 逗号表达式,从左到右计算,最终结果为最右边的值

  • 复合表达式
    优先级,结合性
    基本记忆:单目>双目>三目,算术>位移>逻辑判断>位运算,条件、赋值、逻辑与或都是很低的优先级

  • 类型转换
    需要注意的是算术转换:所有比int小的整型,char,unsigned char,short,unsigned short,如果该类型的所有可能值都包含在int内,他们就会被提升到int型,否则提升到unsigned int。

  • 显示转换(强制类型转换)
    cast-name<type>(expression)
    1、dynamic_cast,继承体系中,从基类到子类的转换
    2、const_cast,去除const属性
    3、static_cast,常用的隐式类型转换
    4、reinterpret_cast,为操作数位模式提供底层次的重新解释

语句
  • break语句,结束最近的while、do while、for、switch
  • try块和异常处理
    1、throw表达式
    2、try块,如果不存在处理该异常的catch,则跳到terminate,导致程序非正常退出
try{ st1
}catch(exc1){handle1
}catch(exc2){handle2
}
  • <stdexcept>头文件定义的标准异常类
最常见的问题
exception
-
运行时错误
runtime_error
range_error
overflow_error
underflow_error
逻辑错误
-
logic_error
domain_error
invalid_error
length_error
out_of_error
  • 使用预处理器进行调试
    int main()
    {
    #ifndef NDEBUG
    cerr<<"test"<<endl;
    #endif
    }
    可以通过定义NDEBUG删除上述调试语句
    同时预处理器还提供了一些有用的常量
__FILE__文件名
__LINE__当前行号
__TIME__文件被编译的时间
__DATE__文件被编译的日期

还有一个有用的工具是assert(断言)预处理宏,频繁的调用会极大的影响程序的性能,增加额外的开销。在调试结束后,可以通过在包含#include <assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用。

一个非常简单的使用assert的规律就是,在方法或者函数的最开始使用,如果在方法的中间使用则需要慎重考虑是否是应该的。方法的最开始还没开始一个功能过程,在一个功能过程执行中出现的问题几乎都是异常。

函数
标准IO库
  • iostream——对流进行读写
    fstream ——对文件进行读写
    sstream ——对string对象进行读写

  • IO对象不可复制和赋值,表明
    1、只有支持复制的元素类型才能放置在容器内,故不能将流对象存储在vector中
    2、在函数中传递或者返回IO对象时,必须使用指向的对象指针或者引用

  • 导致while(cin>>i)终止的原因
    1、系统级故障
    2、输入无效的数据
    3、遇到文件结束符

  • 每个IO对象都管理了一个缓存区,用于存储对象读写的数据,当发生如下情况导致缓存区数据刷新,即写读入真正的设备或者文件
    1、程序结束
    2、缓存区满了,则在写下一个值之前会被刷新
    3、显示刷新,如使用endl,unitbuf
    4、将输出流与输入流关联起来

  • 利用字符串流istringstream,ostringstream,stringstream实现一个句子倒序输出,头文件<sstream>

    //字符串逆序
    string inputLine;
    getline(cin,inputLine);
    istringstream inputLineStream(inputLine);
    string word;
    vector<string> wordVec;
    while(inputLineStream>>word)
        wordVec.push_back(word);
    //逆序打印
    vector<string>::reverse_iterator rit = wordVec.rbegin();
    while(rit!=wordVec.rend())
    {
        if (rit == wordVec.rbegin())
            cout<<*rit++;
        else
            cout<<" "<<*rit++;
    }
    cout<<endl;
  • 文件操作示例,包括ifstream,ofstream,fstream头文件<fstream>
    文件模式

in读权限
out写权限,文件会被清空,同时以in和out打开不清空
app追加
ate定位文件尾
trunc清空打开的文件内容
binary二进制打开

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
const int FILE_NUM = 5;
int main()
{
   //建立文件名
   vector<string> svec;
   string s("file");
   for (int i = 0; i<FILE_NUM; i++)
   {
       stringstream filename;
       filename<<"file"<<i<<".txt";
       svec.push_back(filename.str());
   }
   //打开文件并写入数据
   ofstream ofile;
   for(vector<string>::iterator it = svec.begin();it!=svec.end();it++)
   {
       ofile.open(it->c_str());
       if (!ofile)
       {
           cerr<<"open out file failed!";
           system("pause");
           return -1;
       }
       stringstream text;
       text<<"this is "<<it->c_str()<<endl;
       ofile<<text.str();
       ofile.close();
       ofile.close();
   }

   //读取内容
   ifstream ifile;
   for(vector<string>::iterator it = svec.begin();it!=svec.end();it++)
   {
       ifile.open(it->c_str());
       if (!ifile)
       {
           cerr<<"open in file failed!";
           system("pause");
           return -1;
       }
       string line,word;
       vector<string> wordvec;
       getline(ifile,line);//获取一行数据
       istringstream linestream(line);
       while (linestream>>word)
           wordvec.push_back(word);
       ifile.close();
       ifile.clear();

       //打印
       vector<string>::reverse_iterator rit = wordvec.rbegin();
       while(rit!=wordvec.rend())
       {
           cout<<*rit<<" ";
           rit++;
       }
       cout<<endl;
   }
   system("pause");
}

相关文章

  • 基本语言

    变量与基本类型 变量初始化规则内置型变量是否自动初始化取决于其定义的位置,定义在函数体外部的都将初始化为0,定义为...

  • markdown基本语言

    #标题 >引用 *斜体* **强调** ~~删除线~~

  • 基本语言练习

    不必多言 你觉得我是谁 你难道不悲伤吗 我为什么每到晚上就会觉得伤心呢 也许 又也许 1.你还好吗2.好个屁 可怎...

  • C语言基础教程之基本语法

    C语言基本语法 您已经看到了C程序的基本结构,因此很容易理解C编程语言的其他基本构建块。 C语言中的标记 C语言程...

  • c语言基本学习_基本记录

    基本数据类型 可变参数 宏定义 结构体 联合体[和结构体类似,成员共占一块空间,数据大小根据最大的数据类型确定] ...

  • (四)go语言函数&参数传递

    go语言函数 基本语法 例子 go语言参数传递

  • R语言基本操作

    ##R语言数据的基本操作 例子:mtcars数据 str(mtcars) #结构 变量几个 table(mpg)...

  • R 语言-基本操作

    1、设置工作目录 默认路径的设置: #显示R软件默认使用的目录 > getwd() #R中使用函数必须加括号 #更...

  • R语言 基本语法

    myString <- "Hello,World!"print ( myString )[1] "Hello,Wo...

  • R语言基本语法

    目录 帮助 查看类型 基本运算 数据结构 数据操作 方程计算 1. 帮助 2. 查看类型 mode(),class...

网友评论

      本文标题:基本语言

      本文链接:https://www.haomeiwen.com/subject/uzzytttx.html