C++学习笔录1

1、在实际开发中,引用类型变量值用于函数的参数中。它不会另外开辟空间(提高了程序效率),他相当于变量的别名,代表的就是当前这个变量的地址空间。(引用的底层用的是指针。因此从底层的角度讲,其实它的效率是没有提高的)。
2、不要定义类似下列的函数:
void fun(int parameter){};
void fun(int &parameter){};
这两个函数符合重载的概念。编译也不会报错,但是当出现如下调用时,程序运行就会出错
int m = 10;
fun(m);
这样调用时,程序不知道你调用的是哪一个函数。
3、默认参数函数,定义如下:
void fun(int a = 1);
在函数声明的时候写,默认参数必须写在所有参数的最后。默认参数的函数要少用。在写程序的时候,有时可能会在调用的时候忘记写参数,这时函数就会使用默认参数,这样程序运行的结果可能就不是预期的结果。
4、类是保存在代码段的,可以用它来创建对象。创建的对象也没有成员函数,成员函数也是存放在代码段内的。
5、析构函数不能重载,因为析构函数没有参数,因此无法重载。
6、问:为什么C不能重载?C++可以重载?
    答:编译到最后所有的函数都没有函数名。只有一个地址供程序调用。C语言在编译的过程中就根据函数名(不管参数)来确定地址。而C++在编译的时候会将参数和函数名一起使用来确定地址。
7、指向成员函数的指针,即函数指针。其定义方式与C语言的函数指针定义不同。定义方式是:成员函数返回类型 (类名::*指针变量名)(参数列表)。成员函数int stu::show(int x, int y){},为其定义成员函数指针应如下:
int (stu::*p)(int x, int y) = &stu::show;
stu stu1;
(stu1.*p)(1, 2);//通过对象使用成员函数指针调用成员函数。其调用方式是(对象名.*指针变量名称)(实参)
通过函数指针去调用成员函数也必须使用对象去调用。
8、常成员变量,在成员变量前面用关键字const修饰。它只能并且必须通过构造函数的初始化表为其初始化,而且必须进行初始化,不初始化会报错,以后都不能再为其赋值。相当于只读变量。所有的构造函数都必须通过初始化表对对常成员变量赋值。只读变量应该用大写。
9、常成员函数。函数在形参列表前用const修饰。其在声明和定义都必须加上const。在常成员函数中,(1)、一定不能改变成员变量的值。(2)、不能在常成员函数中调用普通函数,但是可以调用其它常成员函数, 但是普通成员函数可以调用常成员函数。(3)、不能修改对象。除此之外,其它的与普通成员函数一样。
10、常对象。即对象里面的值不能再被更改。它的定义是在定义时加上const修饰。它只能调用常成员函数。(因为常对象的成员变量是不能被更改的,而普通成员函数可能会修改它的值,因此规定常对象只能访问常成员函数)。定义常对象的类的构造函数必须把所有成员变量都初始化。虽然在创建常对象时,不为常对象的成员变量初始化编译器不会报错,但是这样是没有意义的。因为后面就不能再为其赋值了。常对象主要作用就是避免修改不能修改的成员变量。
11、对象的动态创建。使用new创建的对象存放在堆中。但是在堆中分配空间有可能会失败,因此必须对结果进行判断。也可以使用malloc类函数进行创建对象,但是不会调用构造函数,但是这种方法在开发中不要使用。
12、对象赋值与对象复制。赋值:有空间,只是把值拷贝过去。如:stu1 = stu2;复制:原本没用空间,而完全“克隆”出另一个对象出来。其语法为:stu::stu1 = stu2;  
stu stu1(stu2);编译器在处理时,会将第一种情况处理成后面的写法。两种写法等价。都要调用复制构造函数。第一种方法调用了赋值构造函数。对象的赋值与赋值是用于对象的参数和对象返回值。函数传参是属于复制。根据入栈的原理,函数在调用的时候才会为形式参数分配空间。如下:return p;当执行这句时,系统会为返回值找一块内存空间,然后将p的值放进这个内存空间中,然后销毁p的空间。函数调用结束,程序接收到返回值以后,这块内存空间也会被销毁。
13、复制构造函数。当你没有写赋值构造函数时,编译器会自动加上赋值构造函数。这与构造函数和析构函数相同。编译器根据参数来确认是否是复制构造函数。
14、默认构造函数有五个。其中包括无参数默认构造函数,复制构造函数
15、静态成员变量和静态成员函数。静态成员变量与普通成员变量的区别:
(1)、程序开始运行就会创建静态成员变量。程序结束时才销毁。创建对象时,不会在对象的内存块中出现静态成员变量。
(2)、所有的对象使用的静态成员变量都是同一个。它是所有对象共享的变量。
(3)、不随着对象创建而创建,销毁而销毁。
(4)、静态成员变量也叫类变量,可以通过  类名::静态变量名  来引用它。当然也可以用访问普通成员变量方式去访问它。
(5)、静态成员变量虽然是共享的,但是却不能在类中赋值,它也必须在类外赋值。建议放在main函数所在的文件中进行赋值,但是不要写在main函数中。(避免重复导入错误)。
(6)、静态成员方法和静态成员变量的访问方式相同。
(7)、静态成员函数只是在声明时要用static声明,在实现时不需要用static修饰。
(8)、静态成员函数中,不能使用this指针。能不能使用this来访问静态成员变量。静态成员函数中若要访问摸个对象的成员,则必须把这个对象以参数的方式传入静态成员函数。
posted @ 2015-10-24 11:01  zxtp  阅读(224)  评论(0编辑  收藏  举报