时间:2021-05-20
本文实例展示了C++实现不能被继承的类的方法,对于C++初学者而言有一定的学习借鉴价值。具体实现方法如下:
方法一:
#include <iostream>using namespace std;class A{public: static A* getInstance(); static void deleteInstance(A* pA);private: A() { cout << "construct A\n";} ~A() { cout << "destruct A\n"; }};A* A::getInstance(){ return new A;}void A::deleteInstance(A* pA){ delete pA; pA = nullptr;}int main(){ A* pA = A::getInstance(); A::deleteInstance(pA); cin.get();}该方法其实就是把构造函数、析构函数private了,这样的话当想派生一个类时,派生类无法构造一个父类,所以就不行了。
方法二:
#include <iostream>using namespace std;template <typename T>class A{ friend T;private: A(int data) : m_data(data) { cout << "construct A. data: " << m_data << endl; } ~A() {} int m_data;};class B : virtual public A<B>{public: B(int data) : A(data) { cout << "construct B\n"; } ~B() {}};int main(void){ B b(4); cin.get();}类B设置为类A的友元,这样类B作为A的子类就可以构造一个父类了。这时候类B可以正常使用,但是不能从类B派生一个子类,因为B虚继承A,如果想 class C : pulic B 的话,由于是虚继承,那么在C类的构造函数就得直接调用A类的构造函数,但是B是A的友元,C不是,所以无法直接调用A的构造函数,编译出错。这里C类必须直接调用A的构造函数的
但是如果你把B类的声明改为 class B : public A<B> 的话,那么又可以从B类派生一个子类C了,因为不用虚继承的话,在C类的构造函数调用B类的构造函数,B类的构造函数再调用A类的(B是A的友元,即使A的构造函数是private也无妨)。这是一层层向上调用的。
相信通过本文实例可以帮助大家更好的理解C++中类的原理及使用。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
C++类中的继承实例详解实例效果:实现代码:#include#includeusingnamespacestd;classPerson{public:Perso
本文实例讲述了C++实现的多重继承功能。分享给大家供大家参考,具体如下:多重继承1.多重继承即一个类继承了多个基类的属性。2.多重继承下派生类的构造函数必须同时
C++类继承之子类调用父类的构造函数的实例详解父类HttpUtil:#pragmaonce#include#includeusingnamespacestd;c
虚函数主要实现了C++的多态的机制,多态就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。 C++是C语言的继承,它既可以进行C
本文实例讲述了C++多重继承引发的重复调用问题与解决方法。分享给大家供大家参考,具体如下:前面简单介绍了一个C++多重继承功能示例,这里再来分析一个多重继承引发