您的位置:首页 > 编程语言 > C语言/C++

C++杂记

2010-02-01 17:17 197 查看
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.虚函数与虚析构函数的作用是不同的,虚函数是为了实现多台,而虚析构函数是为了同时运行父类和子类的析构函数,使资源得以释放。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: