影醉阏轩窗

衣带渐宽终不悔,为伊消得人憔悴。
扩大
缩小

《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

 

  

 

posted on 2018-01-14 00:14  影醉阏轩窗  阅读(215)  评论(0编辑  收藏  举报

导航

/* 线条鼠标集合 */ /* 鼠标点击求赞文字特效 */ //带头像评论