• 《C++数据结构-快速拾遗》 基础常识


    1.命名空间函数

     1 namespace wjy
     2 {
     3     void print()
     4     {
     5         cout<<"123";
     6     }
     7     int load(int num)
     8     {
     9         return num;
    10     }
    11 }
    12 using namespace wjy;

    2.函数数组的实现

      2.1利用重载函数实现  

        名字相同,参数或者返回值不同等。

     1 int max(int a, int b)
     2 {
     3     return a>b?a:b;
     4 }
     5 double max(double a, double b)
     6 {
     7     return a>b?a:b
     8 }
     9 float max(float a, float b)
    10 {
    11     return a>b?a:b
    12 }

      2.2利用函数指针实现

        注释:指针函数和函数指针的相关知识-->>http://blog.csdn.net/ameyume/article/details/8220832

     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include <iostream>
     3 using namespace std;
     4 
     5 typedef struct DATA
     6 {
     7     int sNumb;
     8     char sName[10];
     9     float sMath;
    10 }DATA;//结构体定义比较类型
    11 typedef bool(*FUNCP)(DATA, DATA);//定义指针函数类型
    12 bool byNumb(DATA p, DATA m)
    13 {
    14     return (p.sNumb > m.sNumb);
    15 }
    16 bool byName(DATA p, DATA m)
    17 {
    18     return strcmp(p.sName, m.sName) < 0;
    19 }
    20 bool byMath(DATA p, DATA m)
    21 {
    22     return (p.sMath > m.sMath);
    23 }
    24 int main(int argc, char*argv[])
    25 {
    26     DATA data1, data2;
    27     data1.sNumb = 10;
    28     strcpy(data1.sName, "abc");
    29     data1.sMath = 1.5;
    30 
    31     data2.sNumb = 1;
    32     strcpy(data2.sName, "wjy");
    33     data2.sMath = 2.9;
    34 
    35     FUNCP ps[] = { byNumb,byName,byMath };
    36     cout << ps[0](data1, data2) << ps[1](data1, data2) << endl << ps[2](data1, data2) << endl;
    37     return 0;
    38 }

    3.内联函数

    C++实现:

    inline max(itn a,int b)
    {
    	return a>b?a:b;
    }
    

    C语言实现:

    define max(a,b) a>b?a:b;

    4.堆空间申请内存

    typedef struct SData:
    {
    	int nNum;
    	char sNum[20];
    };
    1 /*在堆空间申请内存*/
    2     int *p = new int;//申请一个普通变量 delete p
    3     int *p = new int[10];//申请数组     delete []p
    4     SData *p = new SData;//申请结构体对象 delete p
    5     SData *p = new SData[10];//申请结构体数组 delete []p

    5.成员函数

    成员函数不占空间!!!

     1 #include <iostream>
     2 using namespace std;
     3 struct STime
     4 {
     5     int nHour;
     6     int nMin;
     7     int nSec;
     8     void SetTime(int a,int b,int c)
     9     {
    10         nHour = a;
    11         nMin = b;
    12         nSec = c;
    13     }
    14 };
    15 int main(int argc,char**argv[])
    16 {
    17     STime wjy;
    18     wjy.SetTime(1,2,3);
    19     cout << sizeof(wjy);
    20     while(1);
    21     return 0;
    22 }

    C++成员函数用C语言实现:

     1 #include <iostream>
     2 using namespace std;
     3 typedef struct STime
     4 {
     5     int nHour;
     6     int nMin;
     7     int nSec;
     8 };
     9 void SetTime(STime* p,int a, int b, int c)
    10 {
    11     p->nHour = a;
    12     p->nMin = b;
    13     p->nSec = c;
    14 }
    15 int main(int argc, char**argv[])
    16 {
    17     STime wjy;
    18     SetTime(&wjy,1, 2, 3);
    19     cout << sizeof(wjy)<<endl<<wjy.nHour<<endl << wjy.nMin<< endl << wjy.nSec;
    20     //cout<<"123";
    21     while (1);
    22     return 0;
    23 }

    6.预编译语句

    1 #if true
    2     //执行语句
    3 #endif
    4 
    5 #if false
    6     //不执行语句
    7 #endif
    #ifdef _test_
        //如果_test_被#define,那么就执行这句话
    #else
        //如果没被#define,就执行这句话
    
    #define _test_
    #ifdef _test_
        //run
    #else
        //not run

    7.const的作用

      这里暂时不考虑,等找工作前期再补上!https://chuanke.baidu.com/v1760453-135963-522762.html

    8.类

      参考吕鑫老师教程,进行类的基础概念巩固。

      参考类两种初始化的区别:http://blog.csdn.net/ianchoi/article/details/6917899

      8.1类的基础概念

        A.类的赋值使用拷贝构造函数,看拷贝的类型决定深拷贝和浅拷贝!  

    CList::CList(CList& p)
    {
        memcpy(this,&p,sizeof(p));//拷贝构造函数
    }
    int a(10);//这也是拷贝构造函数的一种

        B.先申请的后释放空间,后申请的先释放空间

    1 //先释放list2,后释放list1
    2 CList list1,list2;

        C.static函数在类之中等于全局函数

    class CList
    {
        DATA data;
        static int copy(DATA a,DATA b)//等于全局函数,this调用不到
        {
            a = b;
        }
    }
     1 CList::a = 0;//static初始化在类外全局初始化
     2 class CList
     3 {
     4     static DATA a;
     5 public:
     6     DATA data;
     7     static int copy(DATA a,DATA b)//等于全局函数,this调用不到
     8     {
     9         a = b;
    10     }
    11 };    

        D.在类中定义函数都会增加一个参数this

    1 class wjy
    2 {
    3     void max(int a, int b )
    4     {
    5         return a>b?a:b;
    6     }
    7 }
    8 typedef bool(*FUNCP)(DATA,DATA);//定义指针函数类型就不能调用max,因为max有三个参数

        F.函数中的static类

     1 #include <iostream>
     2 usiang namespace std;
     3 
     4 typedef DATA int;
     5 class wjy
     6 {
     7     DAAT node = 100;
     8 }
     9 void test()
    10 {
    11     static wjy class1;
    12     wjy class2;
    13 }
    14 int main(int argc,char*argv[])
    15 {
    16     test();//static第一次进入的时候进行构造.class2在每一次进入test的时候都进行构造
    17     test();//class2在每一次进入test的时候都进行构造,同时退出的时候也进行析构
    18     test();//class2在每一次进入test的时候都进行构造
    19     return 0;//static 在main函数退出的时候才进行析构
    20 }

      8.2类的两种初始化区别

        注释:曾经去面试的时候被问到了,一问三不知,属实尴尬!

     1 //---在定义的时候分配空间,在构造的时候存放值
     2 //---浪费内存,有时候定义的时候占一个空间,赋值的时候又占一个空间
     3 class CList
     4 {
     5     int data;
     6     CList():
     7     {
     8         data =10;
     9     }
    10 }
    11 
    12 //---在定义的时候分配空间并且初始化
    13 //---初始化的顺序是按照定义的顺序执行,先初始化data,后初始化p
    14 //---只占用一次内存
    15 //---特殊的类型必须使用,例如:int为一个类,这个类只有一个参数的构造。
    16 //---                           int为一个const和引用的时候,不能再private初始化。
    17 class CList
    18 {
    19     int data;
    20     int p;
    21     CList():p(100),data(10)
    22     {
    23     }
    24 }
    25 //----当然这两种初始化的顺序肯定是后者(列表函数初始化)先赋值而且好了。

     https://chuanke.baidu.com/v1760453-135963-528979.html

      

  • 相关阅读:
    React新闻网站--Header组件拆分及样式布局
    React 中的前端路由 react-router-dom
    Bootstrap4 图像形状+Jumbotron+信息提示框+按钮
    Bootstrap4 表格练习
    React好帮手--Ant Design 组件库的使用
    React 中的生命周期函数
    React 中 ref 的使用
    深入理解 Java 线程池
    Elastic 技术栈之 Filebeat
    mysql 开发进阶篇系列 54 权限与安全(账号管理的各种权限操作 下)
  • 原文地址:https://www.cnblogs.com/wjy-lulu/p/8280942.html
Copyright © 2020-2023  润新知