1:从C 到C++ 的语法注意 关于Struct
C++语言将struct当成类来处理的,所以C++的struct可以包含C++类的所有东西,例如构造函数,析构函数,元等,
struct HE
{
int a =0;
} // C++ C 编译不能通过
初始化方式:
C++的struct初始化
struct HE
{
int a;
};
int main(){
HE d={3}; // 因为 HE在C++是类名,可以省略struct。C语言里面要加上struct 才行。
return 0;
}
类的初始化方式
struct HE
{
int a;
};
int main(){
HE d;
d.a = 3;
return 0;
}
C里面定义数据类型
struct HE a; //C语言方式
HE a;//C++方式
2:C++定义全局变量:
- extern char g_szBuffer[]; // 环形缓冲区
char g_szBuffer[1024];
一般定义static 全局变量时,都把它放在.cpp文件中而不是.h文件中,
全局常量(const)
extern const char g_szBuffer[]; //写入 .h中
const char g_szBuffer[] = "123456"; // 写入.cpp中
3:关于变量类型
C中都是用
int i = (int )a; 这种方式转化 而C++中最好使用 static_cast、dynamic_cast
4:关于内联 定义在类声明之中的成员函数将自动地成为内联函数
例如
class A
{
public:
void Foo(int x, int y) { } // 自动地成为内联函数 不用加入inline标识
}
将成员函数的定义体放在类声明之中虽然能带来书写上的方便,但不是一种良好的编程风格,上例应该改成:
// 头文件
class A
{
public:
void Foo(int x, int y);
}
// 定义文件
inline void A::Foo(int x, int y){} //类外的话需要加入inline进行标识
4:数组初始化
TCHAR szBuf[MAX_PATH] = {0};
静态变量的初始化
class Person{
static int Sum;
};
int Person::Sum = 0;
6:关于注释:
如果涉及到大量注释不要使用/* */了 ,直接使用
#if 0
#endif 注释
7:依然关于struct
*数组里面嵌套结构体,初始化赋值的方法
*数据利用{}初始化, 结构体也用{}初始化
//定义消息类型--执行函数宏
#define DUI_ON_MSGTYPE(msgtype, memberFxn) \
{ msgtype, _T(""), DuiSig_vn, (DUI_PMSG)&memberFxn}, \
//结构定义
struct DUI_MSGMAP_ENTRY //定义一个结构体,来存放消息信息
{
CDuiString sMsgType; // DUI消息类型
CDuiString sCtrlName; // 控件名称
UINT nSig; // 标记函数指针类型
DUI_PMSG pfn; // 指向函数的指针
};
/***
*数组里面嵌套结构体,初始化赋值的方法
*数据利用{}初始化, 结构体也用{}初始化
***/
UILIB_COMDAT const DUI_MSGMAP_ENTRY theClass::_messageEntries[] = \
{
{ DUI_MSGTYPE_CLICK, _T(""), DuiSig_vn, (DUI_PMSG)&OnClick},
DUI_ON_MSGTYPE(DUI_MSGTYPE_SELECTCHANGED,OnSelectChanged)
{ _T(""), _T(""), DuiSig_end, (DUI_PMSG)0 } \
};
C语言中也是 关于数组的初始化,常用{}这种方式
数组的初始化:
int a[]={1,2,3}; 这种方式初始化,大括号里写了几个元素那么数组里就有几个元素,相当于int a[3]={1,2,3}
8: vs配置第三方代码 常用的配置 tinyxml
9:代码转化
#ifdef _UNICODE
int iLen = desc[iIndex].length();
LPWSTR lpText = new WCHAR[iLen + 1];
::ZeroMemory(lpText, (iLen + 1) * sizeof(WCHAR));
::MultiByteToWideChar(CP_ACP, 0, desc[iIndex].c_str(), -1, (LPWSTR)lpText, iLen) ;
_stprintf(szBuf, lpText);
delete[] lpText;
#else