类的基本思想是数据抽象和封装。数据抽象是一种依赖于接口和实现分离的编程。类的接口包括用户能执行的操作;类的实现包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。
本文梳理一下类的基础知识和一些值得注意的点,参考《C++ Primer》第七章。
1 访问控制和封装
类中包括成员变量和成员函数,可以定义为 private 或者public。
比如定义一个Person类
class Person{
int height;
int age;
...
public:
int get_height(){
return height;}
...
}
这里,public之前的成员都是私有成员 ,类内可见,类外不可见。public之后的成员开放给类外访问,提供给用户一个使用此类的接口。
C++中定义一个类有struct和class两种类型,它们的区别在于默认的访问权限上。在第一个访问说明符前,struct默认是public,class默认是private。
虽然其数据成员是private的,但是类可以通过声明其他类或者函数为其友元,使得这些友元可以访问类的私有成员。
这里的友元可能有以下几种情况:
- 作为类的接口之一的非成员函数
- 其他类
- 其他类中的成员
这里需要注意的有几点,
一是声明其他类中的成员为友元时,要写清楚名字作用域,另一点在于,必须注意定义和声明之间的依赖关系。友元仅仅提供了访问权限,并不是真正的声明。
比如如下的例子:
struct X{
friend void f();//提供访问权限,f()尚未声明
X() {
f();} //错误,此时f()并未声明
void g();
void h();
}
void X::g() {
return