代码改变世界

visual C++ 2011-5-7

2011-05-09 22:18  Clingingboy  阅读(448)  评论(0编辑  收藏  举报

 

看深入浅出MFC看到的一些细节问题…技术无法跨越,慢慢跟进

一.创建结构体数组

struct tagDemo{
    int a;
    char b;
};

int main() 
{
struct tagDemo a[]={1,'a',3,'b'};
return 0;
}

二.#deinfe中的#、## 和 #@

http://www.cnblogs.com/dust/archive/2008/04/24/1169498.html

#define ConCat(x, y) x ## y;
int main() 
{
char str[]= ConCat("aa","bb");//aabb
return 0;
}

三.struct中的static变量

http://blog.csdn.net/LuckyDan61/archive/2010/05/10/5576367.aspx

typedef struct with_static
{
    int a;
    static const int b = 1; 
}with_static;

c++可以,c不可以

四.#define取指针

#define RUNTIME_CLASS(class_name) (&class_name)
int main() 
{
    Demo a;
    Demo *b=RUNTIME_CLASS(a);
    Demo *c=&a;
    return 0;
}

五.用宏定义类成员

很动态...之前很难理解为什么宏里面还会有一个public

#define DECLARE_DYNAMIC() \
public: \
    int add(int a,int b){ return a+b; };\

class Demo
{
    DECLARE_DYNAMIC();
};
    
int main() 
{
    Demo demo;
    int num=demo.add(1,2);
    return 0;
}

六.在结构体中定义函数

应该也c++可以,c不可以

int tagDemo::foo(int a)
{
    return a+2;
}

int main() 
{
    struct tagDemo tag;
    int num=tag.foo(1);
    return 0;
}

七.结构体中的构造函数

c++中的struct已然变成了类了.

struct tagDemo{
    tagDemo();
    int a;
    char b;
    int foo(int a);
};
tagDemo::tagDemo()
{
    a=1;
    b='b';
}

八.类的静态数据成员初始化

需要在类外部初始化(且只能初始化一次),只有初始化后才可以修改数据成员…这个规矩比较烦

class Demo
{
public:
    static int num;
};
int Demo::num=0;

int main() 
{
    Demo::num=2;
    return 0;
}

九.静态数据成员指针

注意不要被::迷惑,解析从右边开始

Demo::num=2;
int *num=&Demo::num;

参考:http://blog.csdn.net/celeil/archive/2008/04/24/2325239.aspx