人防网站建设,东营网站建设dysem,wordpress能做分类信息网站,网络营销的定义是什么?派生类的拷贝构造函数必须调用基类的拷贝构造完成基类的拷贝初始化。3.派生类的operator必须要调用基类的operator完成基类的复制。需要注意的是派生类的operator隐藏了基类的operator#xff0c;所以显示调用基类的operator#xff0c;需要指定基类作用域 4.派生类的析构函数…派生类的拷贝构造函数必须调用基类的拷贝构造完成基类的拷贝初始化。3.派生类的operator必须要调用基类的operator完成基类的复制。需要注意的是派生类的operator隐藏了基类的operator所以显示调用基类的operator需要指定基类作用域 4.派生类的析构函数会在被调用完成后自动调用基类的析构函数清理基类成员。因为这样才能保证派生类对象先清理派生类成员再清理基类成员的顺序。 5.派生类对象初始化先调用基类构造再调派生类构造。 6.派生类对象析构清理先调用派生类析构再调基类的析构。 7.因为多态中一些场景析构函数需要构成重写重写的条件之一是函数名相同。那么编译器会对析构函数名进行特殊处理处理成destructor()所以基类析构函数不加 virtual的情况下派生类析构函数和基类析构函数构成隐藏关系。首先先写一个父类Person便于下面的讲解。在写子类的4个默认函数时要把父类成员当成一个整体首先将其中的构造函数正如第一条所言我们在写子类的构造函数时在初始化列表部分要显示调用父类的构造函数这里显式调用的格式就如上图所示如果父类还有其他的成员变量那么一并都写入父类的构造函数种。接下来呢时拷贝构造函数这类有人可能有疑惑为什么直接传s就可以呢 这个就涉及到我们上一篇讲的基类和派生类之间的转化有印象的朋友就能记起来子类对象可以赋值给父类的引用或指针本质就是“切片”而我们上面写的Person类中的拷贝构造函数正是引用所以这里直接传子类对象即可。接着是符号重载这里面要注意的是我们要指定作用域来调用Person类中的符号重载至于原因也和上一篇讲的知识有关最后讲的隐藏规则。这里如果不指定作用域那么子类的符号重载会将父类的符号重载给隐藏这里会一直调用自己一直递归最终导致栈溢出。而最后的析构函数呢情况比较复杂就如上图所示按理说应该没问题的就和上面的构造函数和拷贝构造函数一样那么这里为何为报错呢原因就正如第七条所言因为都是destructor所以子类的析构函数把父类的析构函数给隐藏了所以这里就找不到父类的析构函数。所以要利用父类的析构函数就要指定作用域但是析构函数比较特殊我们在实际应用中不会去显示调用父类的析构函数原因就如第六条所言我们要调用子类的析构函数再调用父类的析构函数而这里我们如果在子类析构函数中上去就直接调用父类的析构函数那么就会使顺序颠倒。并且因为第四条所言那么就会导致父类的析构函数被调用两次很明显是不能这么用的这肯定会出问题的。所以在实际运用中我们是不需要主动去调用父类的析构函数这也是析构函数和前面三个默认函数的区别。4.2实现一个不能被继承的类不能被继承的方式我讲解两种c98和c11两种不同的方式。c98的方法就是将父类的构造函数放在private下这种方式为什么可以呢就如上面讲的构造函数子类构造函数要显示调用父类的构造函数而父类的构造函数不能访问通过这种机制就导致父类无法被继承。当我们创建对象时就会出现这样的报错。而c11的方法相较于c98简单了许多直接在类名后面加一个关键字final这样这个类就无法被继承了就如上图所示。二.继承和友元友元关系不能被继承也就是说基类友元不能访问派生类私有和保护成员。我们以上面的例子为例在讲解之前注意我上面写的前置声明因为Display函数同时用到了两个类而student类还没有实现所以就在前面加上一个前置声明来告诉编译器我下面有一个类叫student。通过上面的例子可以看出Display并不能访问子类的保护成员。这就像你父亲的朋友不是你的朋友一样是一个道理所以是无法访问的。