• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++实现不能被继承的类实例分析

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++类模板实例化,c++游戏开发实例,c++实例开发,linux c++项目实例,c++程序实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例展示了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();
}

</div>

该方法其实就是把构造函数、析构函数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();
}

</div>

类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++中类的原理及使用。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 如何在C++中通过模板去除强制转换
  • C++封装远程注入类CreateRemoteThreadEx实例
  • C++模板类的用法实例
  • C++实现不能被继承的类实例分析
  • C++类基本语法实例分析
  • C++日志记录类实例解析
  • C++设计类不能被继承的方法实例讲解

相关文章

  • 2017-05-28C++实现简单的扫雷游戏(控制台版)
  • 2017-05-28详解C++中的成员访问运算符和指针到成员运算符
  • 2017-05-28C语言main函数的参数及其返回值详细解析
  • 2017-05-28浅谈C语言中的强符号、弱符号、强引用和弱引用
  • 2017-05-28C++设计模式之职责链模式
  • 2017-05-28C++实现简单的学生管理系统
  • 2017-05-28C语言中free函数的使用详解
  • 2017-05-28C语言编写获取Linux本地目录及本机信息的小程序实例
  • 2022-04-30ASCII编码,将英文存储到计算机
  • 2017-05-28详谈C++何时需要定义赋值/复制构造函数

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C语言typedef与复杂函数声明问题的深入解析
    • C++运算符重载 成员函数与友元函数详解
    • 判断一个数是不是素数的方法
    • C 语言简单加减乘除运算
    • C语言冒泡排序算实现代码
    • C++封装线程类的实现方法
    • 解析C语言中空指针、空指针常量、NULL & 0的详解
    • C语言中变量与其内存地址对应的入门知识简单讲解
    • 在c和c++中实现函数回调
    • 浅析C++中的函数与指针

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有