C/C++程序开发中实现信息隐藏的三种类型_C 语言

无论是模块化设计,还是面向对象设计,还是分层设计,实现子系统内部信息的对外隐藏都是最关键的内在要求。以本人浅显的经验,把信息隐藏按照程度的不同分成(1)不可见不可用(2)可见不可用(3)可见可用。

1 不可见不可用

就是说模块内部的变量、结构体、类定义对外部而已完全隐藏,外部对此一无所知。常用的实现方法就是利用不透明指针,请参见我的博文C语言开发函数库时利用不透明指针对外隐藏结构体细节。

这种方法同样适用于C++语言,一种可能的实现方式为面向接口编程。

头文件 IMyClass.h

class IMyClass
{
public:
virtual ~IMyClass();
public:
virtual void public_function1();
virtual void public_function2();
};
IMyClass* CreateMyClassObject();

实现文件 MyClass.cpp

#include "IMyClass.h"
class MyClass : IMyClass.h
{
private:
int x;
int y;
int z;
public:
virtual void public_function1();
virtual void public_function2();
};
IMyClass* CreateMyClassObject()
{
return new MyClass();
}

这种实现方法在源码层次和库层次上都能适用。

理论上说,完全实现不可见是最完美的设计。然而这对于程序设计要求非常高,而且会带来更多的代码量和设计逻辑层次以及一些限制(如无法实现对已有类型的继承)。

所以,很多C++库的设计都采用了下面这种可见不可用的方式,如MFC。

2 可见不可用

这种方法指的是专门针对C++而言的,指的是C++类中的非公开类型成员。例如在头文件 myclass.h中:

class MyClass
{
private:
int x;
int y;
int z;
protected:
float f;
public:
int M;
void member_method1();
};

对于调用方来说,包含次头文件后,虽然能够看到x,y,z等成员变量,但是却无法使用它们。只要客户端需要使用 new 来生成实例或者继承类,就必须知道类的完整定义。

对C语言而言,不存在这种情况,因为结构体里的任何变量都是公开的。

3 可见可用

也就是毫无隐藏而言了,程序设计中绝对要避免。

以上所述是针对C/C++程序开发中实现信息隐藏的三种类型,希望对大家以上帮助!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索C信息隐藏类型
C++信息隐藏类型
非语言符号的三种类型、c语言实现map任意类型、收益率曲线的三种类型、价格歧视 三种类型、股骨头坏死三种类型,以便于您获取更多的相关知识。

时间: 2024-12-24 20:16:04

C/C++程序开发中实现信息隐藏的三种类型_C 语言的相关文章

asp.ne开发中跳转页面的三种方法比较

这个跳转页面的方法跳转的速度不快,因为它要走2个来回(2次postback),但他可以跳 转到任何页面,没有站点页面限制(即可以由雅虎跳到新浪),同时不能跳过登录保护.但速度慢是其最大缺陷!redirect跳转机制:首先是发送一个http请求到客户端,通知需要跳转到新页面,然后客户端在发送跳转请求到服务器端. 1 response.redirect 这个跳转页面的方法跳转的速度不快,因为它要走2个来回(2次postback),但他可以跳 转到任何页面,没有站点页面限制(即可以由雅虎跳到新浪),同

java程序 不能运行-JAVA小程序开发中遇到一个问题

问题描述 JAVA小程序开发中遇到一个问题 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at Studentguanli.actionPerformed(Studentguanli.java:111) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$

android 应用程序开发中,清除缓存的功能怎么做啊?

问题描述 android 应用程序开发中,清除缓存的功能怎么做啊? android 应用程序开发中,清除缓存的功能怎么做啊?清除此应用程序的缓存,怎么做? 解决方案 getCacheDir()能够得到当前项目的缓存地址 在项目中经常会使用到WebView 控件,当加载html 页面时,会在/data/data/应用package 目录下生成database与cache 两个文件夹.请求的url 记录是保存在WebViewCache.db,而url 的内容是保存在WebViewCache 文件夹下

Ajax程序开发中常见问题

Ajax程序开发中常见问题,看下文章或许你就少犯了许多错误了. 1.ajax,action中response返回的xml文档格式错误时,eclipse debug进入不到action中.     2.ajax缓存问题,需要加入xmlHttp.setRequestHeader("If-Modified-Since","0");便可解决.     3.如果不是ajax提交,而设置了PrintWriter out = response.getWriter();则jsp会产

界面-web程序开发中文件的下载

问题描述 web程序开发中文件的下载 在登录得主界面增加下载的链接,可以下载发布到服务器上的文件.使用的框架是spring,Struts2,ibatis. 解决方案 如果你不愿暴露文件存储路径,就用io流的方式,若果无所谓,直接把路径放在超链接上即可. 解决方案二: BufferedInputStream br = new BufferedInputStream(new FileInputStream(f)); byte[] buf = new byte[1024]; int len = 0;

Android程序开发中单选按钮(RadioGroup)的使用详解

在还没给大家介绍单选按钮(RadioGroup)的使用,先给大家展示下效果图吧: xml文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_heig

网站开发中, php所扮演的角色,以及与其他语言,工具或库的关系,这个问题很重要

问题描述 网站开发中, php所扮演的角色,以及与其他语言,工具或库的关系,这个问题很重要 网站开发中, php所扮演的角色,以及与其他语言,工具或库的关系,这个问题很重要 解决方案 php是一种web脚本语言,它主要用来编写应用层.web应用层需要iis或者apache这样的web服务器去执行.只使用php其实也可以开发一个完整的服务器端程序了.如果你希望一部分业务放在客户端执行,那么需要用js脚本.如果你希望调用一些别的语言的库,或者出于性能的优化,可以用C++写dll,用php模块加载.

ios-xcode开发中,图片素材的三个尺寸问题

问题描述 xcode开发中,图片素材的三个尺寸问题 用xcode开发ios中,图片素材都是有三个尺寸,新手求问这三个尺寸一般是多大?或者说一般各自适配多大的屏幕.菜鸟自学.不太懂. 解决方案 3个尺寸是适配 普通屏,双倍高清屏,三倍高清屏的 一般是已 普通屏 的图为基础,在它基础上 乘2 和 乘3 例如普通屏的图片尺寸是 4*4 px 那另外两个分别是 8*8 px 和 16*16 px 命名方式分别是 imageName.png,imageName@2x.png,imageName@3x.pn

JS中动态创建元素的三种方法总结(推荐)_javascript技巧

1.动态创建元素一 document.write() 例如向页面中输出一个 li 标签 <pre class="html" name="code"><span style="font-size:12px;"><script> document.write("<li>123</li>"); </script></span> body标签中就会插入