C++入门经典 笔记 (第二十章)使用特殊的类、函数和指针

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lishanlu136/article/details/48246697

静态成员数据

静态成员变量,被关键字static修饰,不同于其他成员变量,它是同一个类的所有实例共享的变量,它们是全局数据(可供程序所有部分使用)和成员数据(通常只供一个对象使用)的折衷。可将静态成员视为属于类而不是对象,通常,成员数据是每个对象一个,而静态成员数据是每个类一个。

静态成员函数

静态成员函数也和静态成员变量类似:它们不属于某一个对象而属于整个类,因此,不通过对象也能调用它们。注意:静态成员函数没有this指针。因此,不能将它们声明为const。另外,由于在成员函数中是通过this指针来访问成员数据变量的,因此,静态成员函数不能访问非静态成员变量。

友元类和友元函数

当我们想要创建成对的类,它们需要能够彼此访问对象的私有成员,但又不想这些信息变成公有的,即我们想将一个类的私有成员数据或函数暴露给另一个类,就必须将其声明为友元类。这扩展了类接口,使其包含友元类。友元关系不能传递,不能继承,也不可交换,即将class1声明为class2的友元并不能让class2成为class1的友元。也可只将成员函数声明为友元函数。

函数指针

大家都知道,数组名是指向数组第一个元素的常量指针,而函数名也是指向函数的常量指针。我们可以声明指向函数的指针,并使用该指针来调用相应的函数。函数指针必须指向有合适返回类型和签名的函数。如:long   (*funcPtr) (int);在这句声明中,funcPtr被声明为一个指针,它指向接受一个int参数且返回类型为long的函数。*funcPtr两边的括号是必不可少的,因为int两边的括号的优先级比间接运算符(*)更高。下面是它们的区别:

long*  func(int);  //将fun()声明为接受一个int参数且返回类型为long指针的函数

long  (*funcPtr) (int);  //将funcPtr声明为一个函数指针,它指向的函数接受一个int参数且返回类型为long

成员函数指针

要创建成员函数指针,可使用与创建非成员函数指针相同的语法,但需要包含类名和作用域运算符(::)。因此,如果pFunc指向类Shape的一个成员函数,它接受两个int参数且返回类型为void,那个pFunc的声明如下:void (Shape::*pFunc) (int,int);成员函数指针的用法和函数指针相同,只是它要通过相应类的对象来调用。注意:我们不需要对pFunc调用delete,因为它是一个指向代码的指针,而不是指向堆中对象的指针。

猜你喜欢

转载自blog.csdn.net/lishanlu136/article/details/48246697