Macros 聚集 in c++
在 c++ 中,一个 Macro 就是一段代码的聚合。使用这个 macro 名称就代表着对应的代码段。
有两种常见的 macro:object 形式,function 形式。可以定义任意有效的字符作为 macro 名称,甚至是 c 关键词。
在 c++ 中,一个 Macro 就是一段代码的聚合。使用这个 macro 名称就代表着对应的代码段。
有两种常见的 macro:object 形式,function 形式。可以定义任意有效的字符作为 macro 名称,甚至是 c 关键词。
有如下代码:
int main()
{
char *s;
s = "hello";
cout << *s << endl;
cout << s << endl;
return 0;
}
//OUTPUT:
//h
//hello
首先定义了一个指针,然后给指针赋值为一个字符串。看起来以上写法有错误,s 指针是一个地址,为什么给它赋值一个字符串?
因为在 c++ 中字符串类似于我们提到的数组,使用数组名就表示第一个数组元素的地址。例如:
int main()
{
int arr[] = {1, 3};
int *p = arr;
cout << *p << endl;
cout << *(p+1) << endl;
return 0;
}
//OUTPUT:
//1
//3
同样在字符串中,s = "hello"
表示将首字母 h
的地址赋给指针。
关于 function 的基础教程参考:C++ 入门教程之四 -- Functions
当 function 的传入参数为数组时,如果我们想要得到数组元素个数可能会这样写:
void testFunc(int arr[]) {
int count = sizeof(arr)/sizeof(arr[0]);
}
int main()
{
int arr[] = {1, 3, 6, 8};
cout << testFunc(arr) << endl;
return 0;
}
sizeof function 可以返回数据占用内存空间的大小。所以用整个 arr 大小除以第一个元素大小可以得到数组元素个数。
但是测试会发现以上得到的 count 值并不是 arr 数组元素个数 4 而是 2。这是因为当 function 传入数组数据时,会自动将其转换为 pointer 指针类型。这时候使用 sizeof()
得到的不是 arr 数据所在地址的内存大小,而是这个指向 arr 数组的指针所占用内存大小。
使用 function 和 class 使我们编程更加简单及易操作。但是它们仍然受限于 c++ 编程规范,在定义它们的参数时必须指定参数的类型。例如:
int sum(int a, int b) {
return a+b;
}
int main () {
int x=7, y=15;
cout << sum(x, y) << endl;
}
inheritance 继承是面向对象编程最重要的概念之一。继承允许我们基于已有的 class 创建新的 class。这能够极大的方便我们创建应用程序。
一个 class 的属性被其他 class 继承,我们称这个 class 叫做 base class。一个从 base class 继承属性的 class 我们称其为 derived class。一个 derived class 获得所有 base class 的功能,且可以有自己独有的功能: