欢迎来到入门教程网!

C语言

当前位置:主页 > 软件编程 > C语言 >

C++实现不能被继承的类实例分析

来源:本站原创|时间:2020-01-10|栏目:C语言|点击:

本文实例展示了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++中类的原理及使用。

上一篇:C++友元(Friend)用法实例简介

栏    目:C语言

下一篇:用C语言获取文件的大小示例分享

本文标题:C++实现不能被继承的类实例分析

本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/3467.html

网页制作CMS教程网络编程软件编程脚本语言数据库服务器

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:835971066 | 邮箱:835971066#qq.com(#换成@)

Copyright © 2002-2020 脚本教程网 版权所有