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

《C++ Primer Plus(第六版)》(28)(第十四章 C++中的代码重用 笔记)

2016-12-28 20:03 393 查看
1.初始化顺序是按照类定义中的顺序的。

2.私有继承,基类的公有成员和保护成员都变成派生类的私有成员。

在不进行显式类型转换的情况下,不能将派生类的引用或指针赋给基类引用或指针。

3.保护继承,公有成员变保护成员。

4.使用using可以改变基类私有变量的访问权限

class son: private Father
{
public:
using Father::menber;
}
不管menber是函数还是数据成员,都是写个名字就行了。不需要带其它东西。

如果有重载函数,则重载函数都可用了。

一些非常旧的版本,可能是不需要写using关键字的。

5.虚基类(Virtual base class)

跟抽象基类不是一个概念的,使用了虚函数的那个叫做抽象基类。。。

虚基类用来解决多重继承的问题。

在继承的时候跟public写在一起。

6.在多重继承中,调用构造函数的时候,子类只能够调用父类的构造函数,更上一层的祖辈类是不能显示调用的。

但是对于虚基类,是可以的,而且,在父类的构造函数中,将不再调用父类的父类的构造函数,如果不显式写明,将使用默认构造函数。

说的有点抽象。

class A
{
public:
A(int a)
{
_a = a;
}
int _a;
};
class B :virtual public A//这里要声明虚基类,下面才能使用A的构造函数
{
public:
B(int a, int b) :A(a)
{
_b = b;
}
int _b;
};
class C :public B
{
public:
C(int a, int b, int c) :B(a, b), A(a)//这里的A(a),如果上面不声明了虚基类,是不能通过编译的。现在这样,B里面讲不再调用A(a)了。
{
_c = c;
}
int _c;
};


7.对于多重继承,其他方法的重复调用问题。好像没有新的语法来解决,只能通过改写代码,分拆函数功能来实现。

8.类模板的类型参数,可以提供默认值的。

template<typename T = int>
class A
{
public:
T get(){ return _a; }
private:
T _a;
};
不过<>还是要保留的。

可以这样声明变量

A<> a


9.类模板和函数模板很相似,都可以有隐式实例化,显式实例化和显式具体化,统称具体化。
隐式实例化,就是平时使用的那些,在声明对象的时候才生成实例。

显式实例化,是声明了显式的模板实例,但是没有对象生成的。

具体化,主要是修改具体的实现方式。

模板类还允许部分具体化。

//普通模板
template<typename T1, typename T2> class Pair{};
//部分具体化
template<typename T1> class Par<T1, int>{};
如果全部都具体化,就变成显式具体化了。

template<> class Par<int, int>{};


10.模板类的友元分为三类:

非模板友元

约束模板友元,友元的类型取决于类被实例化时的类型;

非约束模板友元,友元的所有具体化都是类的每个具体化的友元。

11.别名,C++11的东西

typedef const char* pc1;

using pc2 = const char*;

这两个语句是等价的。

12.到现在的内容,具体的说明开始越来越不重要了,关键还是多练,否则看的再多也不知道说啥。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐