1.今天的宏#define
1-1 宏定义
- 用来防止头文件相互调用包含:
'''
#ifndef _TEST_MACRO //if not define
#define _TEST_MACRO //define
'''
#endif
'''
- 有参宏 '#define 宏名 参数'
例如
'''
#define _CAN_OPEN_FIRST 0
#define _CAN_OPEN_SECOND 1
int main{
std::cout<<_CAN_OPEN_FIRST;//显示1
}
'''
同样 他还可以表示数据类型,如
'''
#define MM struct Student
struct Student{
int a;
}
MM stu = {1};
std::cout<<stu.a;
'''
宏定义还可以做运算和宏嵌套,不过多列举
1-2 宏定义#define和typedef的区别呢
#define只是单纯的替换文本
typedef 则重命名了整个类型
'''
#define _INT1 int*
typedef int* _INT2
_INT1 a1,b1; //定义了一个int*类型的a1,和int型的b1
_INT2 c1,d1;
b1 = &M; //NOTOK
d1 = &N; //OK
'''
https://blog.csdn.net/yanggangclcsdn/article/details/49704089
1-3 另一个防止重复引用头文件的方法
'#pragma once' 两种可以一起用,但是这种兼容性不太好,比较新
1-4 #ifdef 判断某个宏是否被定义,如果被定义,执行一下操作
2 关于类的析构函数为什么会是虚函数
‘class cStudent{
public:
cStudent();
virtual ~cStudent();
}’
什么情况下使用呢? **当此类有可能是父类时**
原因是: ** 当我们new一个子类时,使用基类指针指向该子类对象,释放基类指针时可以释放子类空间,防止内存泄漏**
为什么默认析构函数不是虚函数呢? 因为使用虚函数会占用额外内存,所以除了可能被作为父类的类需要手动虚函数析构函数,默认不是虚函数
https://blog.csdn.net/y601500359/article/details/105297815/
3 const可以修饰是变量 指针 数组 函数参数,被其修饰的项具有只读属性不能被修改