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