c++小知识点(5)
delete表达式只能应用在:用new表达式产生的指针上,如上例.
62.
例如.需要的时候才分配一个字符串,但又不知道该字符串长度时才分配与释放的对象被称为动态分配对象.
动态分配的对象被分配在程序的空闲存储区的可用内存池中.
程序员用new来创建动态分配对象,用delete来结束时对象的生命周期.
63.
名字空间namespace表示方法:
namespace myspace{
….
}
名字空间的别名:
namespace n=myspace;
64.
什么时候用到extern
a,在此文件中声明别的文件的变量时用extern
b,在cpp程序文件中用到c的库函数时用extern
65.什么时候用到static?
a,声明静态变量时用static
b,声明全局变量时可用static
c,static型的变量是存储在静态存储的,他的值在程序运行时只初始化一次
66.
重载函数:
概念:允许多个函数共享同一个函数名,参数可不同但实现的功能相同,重载不关心函数的返回值类型.
目的:为多个不同参数不同名函数,但实现的功能相同的多函数,提供了一种简洁解决方法.
如以下均是重载函数:
① double calculate(double);
② double calculate(double,double);
③ double calculate(double, int);
① 和②可构成重载,②和③也可构成重载,① 和③也可构成重载.
成员函数被重载的特征有:
1) 相同的范围(在同一个类中);
2) 函数名字相同;
3) 参数不同;
4) virtual关键字可有可无。
67.
覆盖是指:
派生类中存在重新定义的函数,其函数名、参数列、返回值类型必须同父类中的相对应被覆盖的函数严格一致
覆盖的特征有:
1) 不同的范围(分别位于派生类与基类);
2) 函数名字相同;
3) 参数相同;
4) 基类函数必须有virtual关键字。
68.
当一个函数在一个域(类)中被多次声明时,编译器会按如下步骤解释第二个(以及后续)的声明:
a.如果两个函数的参数表中参数的个数或类型不同,则认为这两个函数是重载.
void print(const string &);
void print(vector &);//重载函数
b.如果两个函数的返回类型和参数表精确匹配,则第二个声明被视为重复,则产生编译错误.
void print(const string &str);
void print(const string &);//声明同一函数,错误!
c.如果两个函数的参数表相同,但是返回类型不同,则第二个声明被视为重复,则产生编译错误.
unsigned int max(int i1,int i2);
int max(int,int);//错误.
d.如果在两个函数的参数表中,只有缺省实参不同,则第二个声明被视为重复.
int max(int *ia,int sz);
int max(int *,int=10);
e.如果两个函数中,函数名和参数表都相同,而只是一个函数的参数表中有const时,则不能重载,因为const不可更改;但是当用在指针和引用上时例外.
int f(int);
int f(const int );//出错.
69.
注意:
重载函数必须在同一个类(域)中,不同类(域)间的函数不能重载.
70.
函数重载的解析过程:
当出现引用该重载函数时,检查当前类中,该同名函数的数量,然后分析那一个与当前最匹配,则选用最匹配做为解析,如转换出错,则返回错误.
71.
lpcstr — lpctstr —- cstring — char* —-char[] —- char —- 区别?
lpctstr 是将 const char* 类型重新定义
lpcstr 是把 char*类型重新定义
char 是把char类型重新定义
char[] 没有这个东西
cstring是一个类,封装了常用的字符串操作
position 是指集合中某个元素的位置.
如果要表示一个字符串可以这样
char str[32] = “a string”;
char *buf = “bbbbb”;
cstring s = “ccccc”;
如果要支持unicode最好使用cstring类,简单
72.
_t(“”)是一个宏,他的作用是让你的程序支持unicode编码
如果你编译一个程序为ansi方式,_t实际不起任何作用。
而如果编译一个程序为unicode方式,则编译器会把”hello”字符串以unicode方式保存。
_t和_l的区别在于,_l不管你是以什么方式编译,一律以unicode方式保存。
73.
1.快捷键
shift+f4可查看上一个和下一个错误.
f5运行
f7编译
f9断点
f10步越调试
f11步入调试
shift+f5结束调试
ctrl+f5运行
2.问题
改动后,f5时会弹出窗口提示.
变量生存期的问题:循环体内定义的变量在循环结束时就会被销毁,
指针就是地址,指针变量是用来存储地址的!当然,在定义的时候得定义好指针将要指向的变量是int, float ,char,double等中的那种类型。