您的位置:首页 > 编程语言 > C语言/C++

c++ 小知识总结

2012-05-08 17:14 99 查看
1 设置随机数

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int a[50];
srand((unsigned)time(NULL));
for (int i=0;i<50;i++)
{
a[i]=rand()%100;
}




#include "time.h"


srand( (unsigned)time( NULL ) );

int i=rand()%5;


2 静态函数

在AllResult.h中进行声明

如:

#include "stdafx.h"
#include <iomanip>
#include <iostream>
#include <Windows.h>
//#include <vector>
using namespace std;

static BOOL EightQueen();
static void PrintChessBoard();
static BOOL TestNode(int i,int j);

void QueenAll();


在AllResult.cpp中进行定义

static BOOL EightQueen(){

//只需判断第一行中  是否有合适位置即可

BOOL  bExist=FALSE;

for (int j=0;j<NUM;j++)
{
if (TestNode(0,j))
{
bExist=TRUE;
//	break;

}

}

return bExist;

}


注: 定义的静态函数只能在本个 AllResult.h AllResult .CPP可以调用, 在其他.CPP .H中不可调用 , 即使将AllResult.h作为头文件包含到其他文件中,在其他文件中也不可调用此静态函数,因为,静态函数的有效范围是本次文件,当出了本文件范围后,则不可调用

静态函数只是在声明它的文件当中可见,不能被其他文件所调用,也就是说该函数只能在定义的.cpp或.c中调用,在其它.cpp或.c文件的函数里是不能调用的.

比如: 第3个文件queen.cpp

#include "stdafx.h"

#include "AllResult.h"

int main()
{
//调用了 AllResult.h 中的静态函数,因此编译时出错,  出现  函数已声明但未定义的错误
EightQueen();

//此函数也是AllResult.h 文件中定义的, 但因为不是静态函数,故可以在其他文件中使用
QueenAll();

getchar();

return 0;
}


3 类静态变量声明与赋值

类中进行声明:

public:
static CString m_filePath;  // 只是起到声明作用,还需要定义


类外进行定义:

且不能在.H文件中进行定义, 需要在.CPP实现文字中定义

因为,如果在.H中进行定义的话, 连接时,很可能出现多重定义错误,因为包含了多次.H文件,就出现了多次定义

。cpp中定义:

CString CComputerNumDlg::m_filePath=_T("");


数据成员的声明与定义都是放在.h文件的类定义内部。对于数据类型,关键问题是其初始化要放在什么地方进行。

对于只含有static限定符的数据成员,它的初始化要放在.cpp文件中。因为它是所有类对象共有的,因此必须对它做合适的初始化。
对于只含有const限定符的数据成员,它的初始化只能在构造函数的初始化列表中完成。因为它是一经初始化就不能重新赋值,因此它也必须进行合适的初始化。
对于既含有static限定符,又含有const限定符的数据成员,它的初始化和定义同时进行。它也是必须进行合适的初始化
对于既没有static限定符,又没有const限定符的数据成员,它的值只针对本对象可以随意修改,因此我们并不在意它的初始化什么时候进行。

实例:

.h 类的定义

class Test
{
public:
Test(void);

static int m;
const int n;

// static const 在定义时进行初始化
static const int i=9;

};


.cpp类的实现

#include "StdAfx.h"
#include "Test.h"

Test::Test(void):n(10) // const 常量 在构造函数的初始化列表中进行初始化
{

}

//static 变量在.cpp 类的外部进行初始化
int  Test::m=6;


4 定义全局变量

在TEST.H中 声明

extern int i;

在TEST.cpp中定义

int i=0;

在其他用到这个全局变量的CPP文件中,加上这个声明全局变量的头文件 TEST.H

这样,在该文件中就可以直接使用这个全局变量了

分析:

全局类型,声明写在.h文件中。

对于函数来讲,没有实现体的函数,就相当于是申明;

而对于数据类型(包括基本类型和自定义类型)来说,其申明就需要用extern来修饰。

然后在.cpp文件里定义、实现或初始化这些全局函数和全局变量。

工程.H

extern CketangApp theApp;


工程.CPP

CketangApp theApp;


在其它文件中用到时,添加工程.H

5 将CALLBACK函数 封装在类内部

此时,需要将CALLBACK函数,设置为静态函数,其所调用的类变量 也是类的静态变量

public:

static	int CALLBACK  BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData)
{

CString str=_T("C:\\Program Files");
switch(uMsg)
{
case BFFM_INITIALIZED:    //初始化消息

::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)(LPTSTR)(LPCTSTR)m_filePath);   //传递默认打开路径 (方法一)  m_filePath 为类的静态变量

break;
case BFFM_SELCHANGED:    //选择路径变化,
{
TCHAR curr[MAX_PATH];
SHGetPathFromIDList((LPCITEMIDLIST)lParam,curr);
::SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)curr);
}
break;
default:
break;
}

return 0;
}


6 File *fp 获得文件长度

FILE* fp = _tfopen( filePath, _T("rb") );

if (fp==NULL)
{
MessageBox(L"未能打开");
}
// Get file length
fseek( fp, 0, SEEK_END );// 定位到文件末尾
int nFileByteLen = ftell( fp );//获得文件末尾处的位置 ---- 同时,此位置数值 也即是文件长度
fseek( fp, 0, SEEK_SET ); //定位到文件开始


参考资料:

/article/5062202.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: