zoukankan      html  css  js  c++  java
  • C++中对象的创建和使用

    第二章 对象的创建和使用

     

    1:翻译器-源代码转化为机器代码(计算机能执行的形式)。通常可以分为两类:解释器(interpreter)和编译器(compiler)

     

      解释器:将源代码转化为一些动作并立即执行这些动作。如PHPJavaScript。好处在于它从写代码到执行代码的转换几乎是立即完成的,并且源代码总是现存的,一旦出现错误可以立即指出。而坏处是它必须重新翻译任何重复的代码,执行变慢,且必须驻留内存以执行程序

     

      编译器:直接把源代码转化成汇编语言或机器指令。执行时不需要编译器,直接在支持目标代码的平台上运行。可以通过分段编译各段程序提高效率。

     

    编译器和解释器的工作流程可如下图所示。

     

    2:静态类型检查

    在编译器第一遍中会对函数的参数进行检查,以防止出现程序设计错误。而静态类型检查是指在编译阶段而不是运行阶段对其进行检查。相反的,则是动态类型检查。C++使用的就是静态类型检查

     

    3:声明和定义

    声明(declaration)和定义(definition)C++中是两个不同的概念,声明是向编译器介绍名字-标识符。而定义是说明在此建立变量或函数并为其分配内存空间。声明可以在多处不同的地方,但是只能有一个定义。

     

    int func1(int ,int );    //函数声明,包括返回值类型,函数名,参数列表和分号

     

    int func1(int a, int b){} //函数定义,与声明不同在于它有函数体且用括号代替分号  

     

    int a;             //这个可以看做是一个变量声明,也可以看做是一个变量定义

    定义声明+初始化,判断的主要原则是看是否占用内存。例如下面的例子:

    class MyClass //类的声明,无内存占有

    {

      string myString; //string的声明

    };

    然而

    #include<iostream>

     

    //全局作用域

    string myString;//定义,myString是实例化的string

     

    int main()

    {

      //Main函数体内

      string myAnotherString;//定义,myAnotherString是实例化的string

      return 0;

    } //类只是声明,不是真正创建对象,因此在类中不能写如const int len=10;这样的语句!

    extern关键字用于表明“这是一个变量但是不定义它,它的定义在别的地方”。 那么上面的变量声明可以替换成extern int a

     

    4C++文件类型

    通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。其中前面的叫做C++源文件,里面存放的是C++源代码,而后面的为C++头文件,里面放的也是C++源代码。C++支持“分别编译”,可以分别对不同的.cpp文件编译后形成的目标文件进行一次链接(link)即可。因此,在a.cpp文件中定义的一个全局函数可以通过b.cpp中调用,只需要在b.cpp中声明这个函数(编译时会产生一个符号表,链接时会根据符号表查源定义) 

     

    头文件是一个含有某个库的外部声明函数和变量的文件。头文件不需要编译的,当某个.cpp文件需要调用时,可以通过宏命令“#include”将头文件包含进这个.cpp文件中。.h文件不用写在编译器的命令之后,但是一定要在编译器找的到的地方(#include <header> 是从环境或编译器命令行指定的某种路径中查找,而#includeheader.h”则是从当前目录开始查找,如果没找到再和前面的一样查找)

     

    5:一个简单的C++程序

    // hello.cpp

    #include <iostream>   //C++中标准输入输出类

    using namespace std;  //使用std名字空间

     

    int main()

    {

    cout<<”helloworld”<<endl; //数据的标准输出。其中用到了<<操作符重载

    return 0;

    }

    在第三行中出现了名字空间的概念,所谓的名字空间就是一种描述逻辑分组的机制,也就是说如果有一些声明按照某种准则在逻辑上属于同一集团,就可以把他们放在同一个空间中。它主要是用来避免类名的冲突,如果是仅仅包含头文件,编译器无法找到任何有关函数和对象的声明,使用using namespace A来指明调用这个“名字空间的声明和定义”。

     

    6vector简介

    C++vector是一个线性顺序结构,相当于数组,但是其大小可以不预先指定,并且可以自动扩展。简单的说,可以看做是一个动态数组。由于vectorC++标准库的一部分,在使用时需要用头文件#include <vector>将其包含进去。并且,它也是std标准名字空间的一部分,故使用时可以直接用using namespace std即可。vector是一个类模板,而vector(int)是一种数据类型。       

     

    常用的vector构造函数

    1:构造一个空元素的vector对象

    vector  <typename> v1;

    2: 构造一个n个元素的vector对象(并不表述最多只能是n个元素),初始值全为0

    vector  <typename> v1(n);    

    3:构造n个元素的对象并初始化各元素项

    vector  <typename>v1(n, element());

    4:构造一个原有的vector对象的拷贝

    vector  <typename>v1(v2);     

     

    vector对象的几种操作

    1. v.push_back(t)    //在容器的最后添加一个值为t的数据,容器的size变大。另外listpush_front()函数,在前端插入,后面的元素下标依次增大。 2. v.size()           //返回容器中数据的个数
    2. v.empty()        //判断vector是否为空 4. v[n]              //返回v中位置为n的元素 5. v.insert(pointer,number, content)    //向vpointer指向的位置插入numbercontent的内容。还有v. insert(pointer, content)v.insert(pointer,a[2],a[4])a[2]a[4]三个元素插入。 6. v.pop_back()     //删除容器的末元素,并不返回该元素。 7.v.erase(pointer1,pointer2)  //删除pointer1pointer2中间(包括pointer1所指)的元素。vector中删除一个元素后,此位置以后的元素都需要往前移动一个位置,虽然当前迭代器位置没有自动加1,但是由于后续元素的顺次前移,也就相当于迭代器的自动指向下一个位置一样。 8. v1==v2          //判断v1v2是否相等。 9. =<<=>>=      //保持这些操作符惯有含义。 10. vector<typeName>::iterator p=v1.begin( );  //p初始值指向v1的第一个元素。*p取所指向元素的值。对于const vector<typeName>只能用vector<typeName>::const_iterator类型的指针访问。 11.v.clear()      //删除容器中的所有元素。

    12.vector <typename>::size_type x; //vector <typename>类型的计数,可用于循环如同for(int i)

    式例说明:

    #include <iostream> #include <cassert> #include <vector> using namespace std; int main() { vector<string> v(5, "hello");  //构造并初始化v vector<string> v2(v.begin(), v.end()); //构造v2并使其等于v

    assert(v == v2); //assert宏判定表达式是否为真,若为假则先向标准错物流打印一条出错信息,然后通过调用abort来终止程序

    cout<<"> Before operation"<<endl; for(vector<string>::const_iterator it = v.begin(); it < v.end(); ++it) cout<<*it<<endl;  //通过it指针输出v

    v.insert(v.begin() + 3, 4, "hello, world"); //3位置插入4“helloworld” cout<<"> After insert"<<endl; for(vector<string>::size_type i = 0; i < v.size(); ++i) //vector循环 cout<<v[i]<<endl;

    vector<string>::iterator it = v.erase(v.begin() + 3, v.begin() + 6); //移除从36string assert(*it == "hello, world"); //判断此时it是在哪里 cout<<"> After erase"<<endl;  for(vector<string>::size_type i = 0; i != v.size(); ++i)  cout<<v[i]<<endl;

    assert(v.begin() + v.size() == v.end()); assert(v.end() - v.size() == v.begin()); return 0; }

                               

  • 相关阅读:
    常量的定义
    二进制、八进制、十进制、十六进制间的转换
    使用简单的 5 个步骤设置 Web 服务器集群
    新手推荐:IIS+PHP+MYSQL环境配置教程
    windows7 iis安装与配置
    web服务器配置方法
    如何配置web服务器
    系统没有“internet信息服务(IIS)管理器”
    Html 内嵌 选择器属性 Dom操作 JavaScript 事件
    <转载>使用css让大图片不超过网页宽度
  • 原文地址:https://www.cnblogs.com/cao-jie/p/3453138.html
Copyright © 2011-2022 走看看