学习没有捷径,但考试有捷径
临近考试,虽然之前对一些概念搞清楚了,但时日一长,很多又模糊了。因此利用整理成章,将知识重拾。
考试的范围如下:
- 常量(const、符号、字符串常量、立即数)
- 引用和指针
- 类的封装和隐藏(静态成员、友元函数)
- 类的初始化(初始化方式和顺序)
- 类的继承(继承方式、构函列表、多继承)
- 类的多态性(函数重载、运算符重载、虚函数、虚函数表)
- 类的作用域概念
this指针
- 隐含参数,指向调用成员函数的对象
void Person::copy(Person &p)
{
if(this==&p)
return;
else
strcpy(this->name,p.name);
}
- this 在某个调用函数的对象中是常量(型的)指针,但可以将其转化为指向常量的常量指针
getValue()const
{
return c;
}
静态
静态成员
静态数据成员
该类的所有对象共享此数据
class C
{
public:
static int c;
int getValue()const
{
return c;
}
};
程序一开始运行便生成,必须在函数体外进行初始化,否则造成链接错误。
int C::c = 0;
静态成员函数
没有this指针,只能访问静态数据成员
static void add(C&t)
{
t.c3 = c1 + c2;
}
除非传入对象参数
- 公有成员可以 通过
C:: <function name>
进行访问,但私有不可以,私有静态成员函数只能在类内访问
常量
常量对象
定义的同时必须初始化,且程序运行期间不进行修改
const C t(3);
cout << t.getValue() << endl;
常量成员
常量数据成员
创建对象时必须初始化列表中初始化,不能在函数体中。且不能再更新
const int c4;
C(int a=4) :c(a),c4(a){}
常量成员函数
在函数定义后加const
int getValue()const;
- 类体外定义不得遗漏const,与静态相区分
- const可区分重载函数,普通对象使用普通函数,常量对象对应常量函数
友元
通过成员函数访问私有成员和保护成员,频繁访问增加开销,友元关系可使外部函数或类访问此类的成员(尤其是私有成员),节省开销
友元函数
- 可在类的任意部分定义,外部使用无限制
- 不含this指针,故需要在传入参数时传入引用或指针
友元类
可以访问所有友元关系的私有成员和保护成员
friend class B;