1.我们必须在调用一个函数之前就高数电脑这个函数已经存在了,否则就成了“马后炮”。所以,我们一般把函数的声明放在主函数的前面。
2.reference。 变量数据类型 &引用名=已声明的变量名。 int a; int &b=a;//变量a的引用b,对b的操作就是对a的操作。 对象也可以有引用: 类名 &对象名a = 对象名b;
#include "iostream.h" void main() { int a=2; int &b=a;//给变量a起了个绰号叫b cout <<"a=" <<a <<endl; cout <<"b=" <<b <<endl; a++; cout <<"a=" <<a <<endl; cout <<"b=" <<b <<endl; b++;//对b的操作也就是对a的操作,所以b++就相当于a++ cout <<"a=" <<a <<endl; cout <<"b=" <<b <<endl; } 函数参数里的 引用参数 #include "iostream.h" void swap(int &x,int &y); void main() { int a=2,b=3; swap(a,b); cout <<"a=" <<a <<endl; cout <<"b=" <<b <<endl; } void swap(int &x,int &y) { int temp; temp=x; x=y; y=temp; } a,b交换
#include "iostream.h" void swap(int x,int y); void main() { int a=2,b=3; swap(a,b); cout <<"a=" <<a <<endl; cout <<"b=" <<b <<endl; } void swap(int x,int y) { int temp; temp=x; x=y; y=temp; } a,b没有交换
3.直接或间接的在函数体内调用函数本身的现象称为函数的递归。
4.指针存储的是值的地址。是一个变量。 当我们要声明多个指针变量时,必须在每个指针变量名前加上* int *p1,*p2,p3 //p1,p2都是指向整型变量的指针变量,而P3是整型变量。 空指针,int* p1 =NULL; //c++大小写敏感,NULL与null是不同的。 *,解引用操作符,获取指针所指向的变量或存储空间。 #include "iostream.h" void main() { int i=3; int *iptr=&i; int **iptrptr=&iptr; //iptr也是变量,也能够获取它的地址。 cout <<"Address of Var i=" <<iptr <<endl;//输出iptr存储的内容,即i在内存中的地址。 cout <<"Data of Var i=" <<*iptr <<endl;//输出iptr所指向的变量 cout <<"Address of Pointer iptr=" <<iptrptr <<endl;//输出iptr在内存中的地址 cout <<"Address of Var i=" <<*iptrptr <<endl;//输出iptr所指向的变量,即iptr *iptr=2+*iptr; cout <<"Data of Var i=" <<*iptr <<endl; }
只能够读出内存中的数据,却不能修改内存中的数据。即指向常量的指针,简称常量指针。 const int* iptr //能够通过指针iptr读出内存里的数据,但是不能对其写入,修改。
指针常量和常量指针不同,指针常量是指所指向的位置不能改变,即指针本身是一个常量。但是指针常量可以通过简介引用修改内存中的数据 #include "iostream.h" void main() { int a=42; const int b=84; const int *captr=&a;//常量指针 int * const acptr=&a;//指针常量 int *bptr=&b;//错误,不能把常量的地址给指针变量 const int *cbprt=&b;//把常量的地址给常量指针是允许的 *captr=68;//错误,间接引用常量指针不可修改内存中的数据 *acptr=68;//间接引用指针常量可以修改内存中的数据 captr=&b;//常量指针可以指向其他变量 acptr=&b;//错误,指针常量不能指向别的变量 const int * const ccaptr=&a;//常量指针常量,既不能间接引用修改数据,也不能指向别的变量或常量 *ccaptr=68;//错误,不能间接引用修改数据 ccaptr=&b;//错误,不能指向别的常量或变量 }
5.枚举,允许用户自定义一种类型,并且列出该数据类型的取值范围。 enum 类型名{常量}; 在定义一个枚举类型时,不能有2个相同的枚举常量。 在定义二个不同的枚举类型时,不能有2个相同枚举常量。
6.头文件的使用主要在2个方面,一个是重用(多次使用),另一个是公用。
7.#include <..> 包含C++提供的头文件。 #include ".." 无论这个文件是C++提供的还是自己编写的,一定是正确的。
8.程序的编译和连接统称为编译阶段,程序的运行和测试统称为运行阶段。 在编译阶段发生的错误称为编译错误,在运行阶段发生的错误称为运行时错误。 对于编译错误,通过检查并修正语法错误来解决;对于运行时错误,通过检查并修正语意(程序设计思想)错误来解决。
9.静态成员函数也是属于一个类而不属于某一个具体的对象。 static 返回值类型 函数名(参数表); 在定义静态成员函数时,不能出现static。 静态成员函数的调用: (1)类名::静态成员函数名(参数表); (2)对象名.静态成员函数名(参数表); (只能访问静态成员数据)
10.父类的成员对象是最先构造的,接着在运行父类的构造函数,最后在运行子类的构造函数。 如果想吧子类的构造函数的参数传递给父类的构造函数时,可以在子类的构造函数定义中调用父类的构造函数: 子类名::构造函数名(参数表):父类名(参数表) 继承后,析构函数的运行顺序恰好与构造函数的运行顺序相反。
11.在公有继承情况下父类的对象指针指向子类对象是可以的。但是这样做了后,这个指针无法使用子类中扩展出的成员。
12.设置虚函数:在成员函数的声明最前面加上保留字virtual。特别注意,不能吧virtual加到成员函数的定义之前,否着会导致编译失败。
13.虚函数与虚析构函数的作用是不同的,虚函数是为了实现多台,而虚析构函数是为了同时运行父类和子类的析构函数,使资源得以释放。
|
请发表评论