看了 CSDN VC编程经验总结基础篇后的几点疑问(100分)!
期盼高手解答,最好能给出实例,菜鸟感激不尽!
1、用sizeof计算变量的空间,如果是数组,按实际空间返回;常量字符串(实际上是在静态内存区开辟
的变量)sizeof返回比实际长度加一。如果是指针则不考虑它指向的空间大小,仅仅返回指针类型的大小
。如果用sizeof计算函数的行参,即使是属组也仅仅返回一个相关类型指针的大小。
2、用const定义的int可用来开辟数组,但const定义的常量数组中的元素,不能用来定义数组。
3、 类中的常量const 类型的,不能在类中被用来定义数组。而enum {ONE=100; TWO=2};定义的ONE、TWO
却可以。通常的enum定义的置分配问题:enum A{ L=9, Z};此时Z的值为10。
4、如果用sizeof计算函数的行参,即使是属组也仅仅返回一个相关类型指针的大小。
5、c和c++编译器,对相同的函数名编译后生成的相同的标示不同,故而在引用c的库文件时必须使用
extern “C”告诉编译器,它是c的函数,按c的规则编译。通常我们使用的标准头文件已被处理过。
6、第二次定义一个已存在的static变量,对变量的内容无影响,但它的可见范围只在定义的范围内。
7、重载函数的时候也可以使用const,考虑下面的代码:
class MyClass
{
char *str ="Hello, World";
MyClass()
{
//void constructor
}
~MyClass()
{
//destructor
}
char ValueAt(int pos) const //const method is an accessor method
{
if(pos >= 12)
return 0;
return str[pos]; //return the value at position pos
}
char& ValueAt(int pos) //通过返回引用设置内存内容
{
if(pos >= 12)
return NULL;
return str[pos];
}
};
在上面的例子中,ValueAt是被重载的。Const实际上是函数参数的一部分,在第一个成员函数中它限制这
个函数不能改变对象的数据,而第二个则没有。这个例子只是用来说明const可以用来重载函数,没有什
么实用意义。
那么在什么情况下调用char ValueAt(int pos) const,什么时候调用char& ValueAt(int pos)呢?