C++记录
1.size_t
size_t是一种无符号的整型数,它的取值没有负数,在数组中也用不到负数,而它的取值范围是整型数的双倍。sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。
typedef unsigned int size_t
size_t是无符号的,并且是平台无关的,表示0-MAXINT的范围
size_t是标准规定的一个同义词,它的原始定义放在stddef.h里面,不同的环境下,
可以是typedef unsigned size_t;
也可以是
typedef unsigned long size_t;
2. C++引用
参考网址
(1)从引用的使用方式上,可以推导出T& == T* const,一个不可修改指向地址的指针,但指向内容是非const,依然可以修改内容
(2)const引用可以绑定一个常量值,而不一定是一个类型对象,这样作为参数的时候,const引用可以使用临时对象和常量值作为参数,而非const引用作为参数,只能使用一个引用对象作为参数
(3)可以通过&运算符获取地址的,就是左值;若否就是右值。
(4)引用一般的概念称为变量的别名,定义的时候必须初始化绑定一个指定对象,且中途不可更改绑定对象。
(5)常量引用只有2种情况会绑定到实际的对象:一是常量引用的初始值为const对象,且该对象类型与常量引用类型相同(如const int i ; const int &r = i;);二是常量引用的初始值为非const对象,且该对象也与常量引用类型(除去const的类型)相同(如int i; const int &r = i;).测试代码中,r2的情况即是如此.这种情况下,绑定的非const对象内容可以用其他普通引用改变.
参考网址
3. 构造函数给类中参数赋值
参考代码:
class Student{
5 public:
6 Student(){
7 cout<<"调用默认构造函数"<<endl;
8 };
9 Student(string name,int age,string gender):Name(name),Age(age),Gender(gender){
10 //cout<<"调用构造函数1"<<endl;
11 }
12 Student(const Student& stu){//拷贝构造函数
13 Name=stu.Name;
14 Age=stu.Age;
15 Gender=stu.Gender;
16 cout<<"调用拷贝构造函数"<<endl;
17 }
18 ~Student(){
19 //cout<<"调用析构函数"<<endl;
20 }
21 void show(){
22 cout<<"Name:"<<Name<<endl;
23 cout<<"Age:"<<Age<<endl;
24 cout<<"Gender:"<<Gender<<endl;
25 }
26 private:
27 string Name;
28 int Age;
29 string Gender;
30 };
- 构造函数前加~:析构函数
参考网址
(1)析构函数(destructor) 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。
(2)以C++语言为例:析构函数名也应与类名相同,只是在函数名前面加一个位取反符,例如stud( ),以区别于构造函数。它不能带任何参数,也没有返回值(包括void类型)。只能有一个析构函数,不能重载。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数,它也不进行任何操作。所以许多简单的类中没有用显示的析构函数。