zoukankan      html  css  js  c++  java
  • C++数据结构知识点

    数据结构(data stucture)的定义:数据结构由数据元素的集合和该集合中数据元素之间的关系组成。

    即{D,R}。

    线性结构,即线性表(linearlist).  ---数组(array),文件,栈(stack),队列(queue),优先级队列

    非线性结构  ---集合,图

    C++类默认访问级别是private

    struct默认访问级别是 public 这可以说是他们的惟一区别。

    union默认访问级别也是 public

    流是个简单的字符序列

    cout<<endl; 输出一个换行符,并清空流。

    C++的输入输出:

    void main()
    {
    
    ifstream inFile;         //inFile为输入流对象
    ofstream outFile;     //outFile为输出流对象
    outFile.open("my.dat",ios::out); //建立输出的目标位置,文件my.dat
    
    char c_date[]="i love you,yanting";
    int number;
    outFile<<c_data<<endl;   //输出到my.dat;
    outFile<<number<<endl;
    inFile.open("my.dat",ios::in|ios::nocreate);
    if(!inFile)
    {
        cerr<<"不能打开my.dat"<endl;
       exit(1);
    
    }
    inFile>>number;
    
    }
    
    // 解释: 
    open函数参数有两个,一个是文件名,另一个是数据流动方向,
    其模式有:
    ios::out
    ios::in
    ios::app  //追加到文件末尾 
    ios::binary
    ios::nocreate   //文件不存在则打开失败 !

    C++函数都有返回,用return表示返回一个与返回类型相同的值并终止函数的执行。

    C++参数传递:

    c++函数参数传递默认是采用传值,即copy一个副本,并不改变实参的值。

    若需要传引用,则需要加上&,如 love(int &)。  引用传递的是实参的地址,所做改变都是对实参的改变。

    如果参数是一个非常巨大的对象时,采用传引用将会节省非常多的传值时间,并且省去了副本占用的空间。

    另外,当函数的返回值多于一个时,其中一个可由return返回,其他可使用引用型参数返回呢。

    注意了:

    传值的时候,参数可以是常量,常数,变量,表达式。

    传引用时,只能是变量或者对象。

    数组的传递非常特殊,传的是数组第一个元素的位置,也就是引用传递。 函数内部所做的改变将引起数组的变化,这一点必须牢记!

    int addall(int a[],int n)
    {
    if(n>0) return a[n-1]+sum(a,n-1);
    else return 0;    
    }

    如果传递的参数是一个对象A,那么函数中会创建A的一个副本,创建时自然会调用A的复制构造函数,在函数结束的时候会调用副本的析构函数撤销这个副本。

    此时若没有自定义的复制构造函数,将调用编译器自动产生的复制构造函数。 原对象A的构造函数中不可以使用指针动态创建内存空间,因为自动产生的复制构造函数只

    进行简单的指针复制,不分配空间。 或者你自己定义复制构造函数。

    C语言中动态分配空间使用函数malloc  通过free释放这个空间

    c++则用new 和delete取代了malloc and free.

    int *p=new int;  指针会根据类型自动强制转换。

    delete p;

    int *p=new a[100];

    delete []a;

    C++的继承性:

    class shape{
    public:
           shape(point);
           void move(point);
           vitual double area()=0;
           vitual void draw()=0;
    private:
            int count;
          
    };
    
    class traingle:public shape{      
      public:
        traingle(point,point,point);
        void draw();
        double area();
    private:
        int details;
    }                              
     // 注意,继承不到父类的private属性。

    c++的多态性:

    c++支持两种多态性: 

      编译时多态性:函数名的重载,操作符的重载。   //编辑器通过参数的个数,顺序,类型不同而把他们变成名字不同的函数。

      运行时多态性:通过派生类和虚函数实现。        //运行时通过虚函数列表来寻址函数地址,从而定位不同对象的函数。

    操作符重载:

    Point operator+(const Point&p);

    Point operator*(int i);

    int operator<(const Point& p);

    输入输出符重载:

    istream& operator>>(istream$ is,object& o) //重载输入运算
    
    {
    
    is>>o.id>>o.name>>o.sex;
    
    return is;
    
    }
    ostream& operator<<(ostream$ os,object& o) //重载输出运算
    
    {
    
    os<<o.id<<o.name<<o.sex;
    
    return os;
    
    }

    这样子,输入

    cin>>o1;

    cout<<o1;  将会以之前重载的方式输入输出。 

    C++的虚函数:


    虚函数通过在基类中使用vitual修饰函数而产生,有两种情况:

    1. vitual void draw(){
    
       your code;
    
    }
    
    2. vitual void draw()=0;   //不提供实现,需要在子类实现。  这样的虚函数称为纯虚函数(pure vitual function),如果一个类有至少一个纯虚函数,那么这个类就是抽象类(abstract class)。

    抽象类不可以生成实例,只能被继承。

  • 相关阅读:
    chrome 浏览器设置useragent为微信浏览器
    js 16进制颜色和RGBA颜色互转
    json parse 大数精度丢失
    taro 小程序react 搜索高亮关键字
    sourcetree 配置 openssh
    一次性卸载npm本地包(node_modules)依赖
    微信小程序订阅消息开发总结
    微信小程序请求设置权限
    taro
    浅谈JS之AJAX
  • 原文地址:https://www.cnblogs.com/xiancai5210/p/3664467.html
Copyright © 2011-2022 走看看