c++基础小知识点总结

1、const与指针一起使用有三种:指向常量的指针、常指针、指向常量的常指针。

(1)指向常量的指针:

int a=10;
int c=30;
const int * b=&a;

上述代码中,b为一个指向常量的指针,可以改变指针b所指向的地址,但是无法改变指针b所指向地址的数据。列如:

b=&c//正确
*b=20//错误

(2)常指针:

int a=10;
int c=30;
int* const b=&a;

上述代码中,b为一个常指针,可以改变指针b所指向地址的数据,但是无法改变指针所指向的地址。列如;

*b=20;//正确
b=&c;//错误

(3)指向常量的常指针:

int a=10;
int c=30;
const int* const b=&a;

上述代码中b为一个指向常量的常指针,既不能改变b所指向地址的数据,也不能改变b所指向的地址。列如:

b=&c;//错误
*b=20;//错误

2、如果函数调用的位置在函数定义之前。则要求在函数调用之前必须对所调用的函数作函数原型声明(函数名,参数类型与个数,函数返回值)。函数原型的的参数表中可以不包含参数的名字,而只包含他们的类型。

3、在函数声明时,所有指定默认值的参数都必须出现在不指定默认值的参数右边。

4、编译系统根据实参的类型和个数来确定调用哪个重载函数。

5、如果有两个同名变量,一个是全局的,一个是局部的,那么局部变量在起作用域内具有较高的优先级,它将屏蔽全局变量。如果希望在局部变量的作用域内使用同名全局变量,可以在全局变量的签名加上“::”,此时代表全局变量。

6、强制类型转换格式:

int i=10;
double x=(double)i;
double y=double(i);

上述两种方法都可以通过编译。

7、引用:

格式:类型 & 引用名=已定义的变量名;

int i=5;
int &j=i;

在此j是一个整型变量的引用,用整型变量i对它初始化,这时j就可以看做是i的一个别名。i和j的作用相同,都代表同一个变量。对变量声明一个引用,并不另外开辟内存单元,变量i和变量j占用内存的同一位置。当变量i发生变化时j也随之变化,反之亦然。

(1)引用除了用作函数的参数或返回类型外,在声明引用时,必须立即对它初始化,不能声明完成后再赋值。

int i=5;
int &j;
j=i;

上述代码是错误的。

(2)为引用提供的初始值,可以是另一个变量或另一个引用。

int i=5;
int &x=i;//声明x是整型变量i的引用
int &y=i;//声明y是整型引用x的引用

上述代码正确,相当于i有两个别名x,y。

(3)引用在初始化后不能再被重新声明为另一个变量的引用。

(4)可以将引用的地址赋值给一个指针,此时指针指向的是原来的变量。

(5)不能建立void类型的引用。

8、在默认情况下(即没有指定属于私有或公有时),类中的成员是私有的。

9、构造函数:(下面以Date类举例)

(1)构造函数名字必须与类名相同,它可以有任意类型的参数,但不能有返回值类型,它不需要用户来调用,而是在建立对象时自动执行。

(2)如果没有给类定义构造函数,则编译系统自动的生成一个默认构造函数,这个默认构造函数不带任何参数值,函数体为空,只能为对象开辟数据成员存储空间而不能给对象中的数据成员赋值。但是只要类中定义了构造函数,系统将不再给它提供默认构造函数。

(3)构造函数可以不带参数,使用无参构造函数创建对象时,应该用语句“Date date;”,而不能用语句“Date date();”。

(4)构造函数可以给参数设定默认值,在定义对象时若不指定参数则使用默认参数。

Date(int year=2018,int month=1,int day=1);
Date d1;
Date d2(2018,6,10);

上述语句中,创建对象d1时没有给定参数,则使用默认参数,d1为2018,1,1。d2给定了参数则使用给定的参数,d2为2018,6,10。

(5)一个类只能有一个默认构造函数,因此不能在声明无参的构造函数后再声明带有默认值的构造函数。

10、析构函数:

(1)析构函数名与类名相同,但在它之前要加一个波浪号(~)。

(2)析构函数不返回任何值。

(3)析构函数没有参数,不能被重载,因此一个类只能有一个析构函数。

(4)对象被撤销时系统会自动调用析构函数。

11、拷贝构造函数:

(1)拷贝构造函数名与类名相同,该函数也没有返回值。

(2)该函数只有一个参数,并且是同类对象的引用。

(3)每个类都必须有一个拷贝构造函数。如果没有定义类的拷贝构造函数,系统会自动生成一个默认拷贝构造函数,用于复制出数据成员完全相同的新对象。

(4)定义和调用的一般形式:

类名 ::类名(const 类名& 对象名)

{

//拷贝构造函数的函数体

}

调用的一般形式:

类名 对象2(对象1);//代入法

列如: Date d2(d1);

类名 对象2=对象1;//赋值法

例如:Date d2=d1;

(5)调用拷贝构造函数的三种情况:

1》当用类的一个对象去初始化该类的另一个对象时,拷贝构造函数会被调用。(代入法和赋值法)。

2》当函数的形参时类的对象,在调用函数进行形参和实参结合时,拷贝构造函数将会被调用。

列如:

void fun(Date d)
{
}
int main()
{
Date d1;
fun(d1);
return 0;
}

执行语句“fun(d1)”时,对象d1是实参,用它来初始化被调用函数的参数d,需要调用拷贝构造函数。

3》当函数返回值是类的对象,在函数调用完毕将返回值带回函数调用处时,此时就会调用拷贝构造函数,将对象复制给一个临时对象并传到该函数的调用处。

例如:

Date fun()
{
Date d1;
return d1;
}
int main()
{
Date d2;
d2=fun();
return 0;
}
12、对于用const修饰的数据成员,或是引用类型的数据成员,不允许用赋值语句直接赋值,因此,只能用成员初始化列表对其初始化。

猜你喜欢

转载自blog.csdn.net/smx_dd/article/details/80645807