C++数据访问声明的思考

首先我们都知道对于基类的私有数据或者接口,不论是何种的继承,这个数据永远属于这个基类,只有这一份属于这个基类所定义的对象,当然对于这个基类的对象这个数据可以有多份,但是对于类外的其他类来说就是只有一份,永远不能给派生类共享。派生类只能通过基类的方法进行访问。(这里首先不对友员函数进行讨论,暂时忽略)

其次对于所有的数据如果使用私有继承,无论数据或接口在基类中的访问属性是什么,在经过这个私有继承之后就会全变成基类的私有成员

下来对于基类的公有数据如果使用公有属性就会还是在派生类中是公有属性,如果使用保护继承就会变成派生类中的保护属性,就是只能在派生类中使用公有接口才可以访问

对于基类的保护数据如果使用公有继承就还是在派生类中是保护属性,如果使用保护继承还是保持自身不变

下来说一说各种的继承方式,对于私有继承就是好比告诉派生类我这边的东西(数据或者接口)只有我这一份,你想COPY,不给,但是我可以允许你在读或者写操作时候通过我给你提供的数据接口进行操作。对于保护继承就是告诉派生类我这边这个东西(数据或者接口)我可以拷贝一份给你,但是你必须珍惜这个我给你的东西,并且我的这些数据的访问权限你也不能更改,一定过去把他也保护起来。对于公有继承就是我公开的所有的并且也给你,你过去也必须将这些公开,但是我的数据原本的属性不可以更改。

再说一说保护数据与私有数据。在设计的时候已经考虑到了,为了维护数据安全和共享就是出现了在公有数据与私有数据之间的一种保护数据,私有数据是只有自己类中一份,其他类想使用先要我同意才可以,必须走我的接口,而保护数据是继承类中可以和积累共同享用的私有数据,就是无论我被派生多少次,我的心还是不变我还是在你使用我的时候作为你的私有数据,哎呦,说的有点煽情了!!!

前面我们知道对于公有的继承所有的基类公有接口也是派生类的公有接口,可以直接使用派生类中的对象直接调用基类的接口,但是保护继承所有的基类公有接口就会变成派生类中保护类型,这样派生类对象可以通过派生类中的公有接口访问基类的公有接口,还有对于私有继承,基类中的公有接口就会变成派生类中的私有数据,必须通过派生类的公有接口访问基类的公有接口(这里我只说找类的接口没有说找类的数据是因为找到接口,数据肯定找到)

所以下面我说的访问声明就是针对上面的保护继承和私有继承中访问基类的公有接口麻烦的解决,这样可以减少派生类中在构造一个公有函数来访问基类的公有接口,下面只以私有继承为例其实保护继承是一样的

/**********************************************************************
* *   Copyright (c)2015,WK Studios
* *   Filename:  A.h
* *   Compiler: GCC  vc 6.0
* *   Author:WK
* *   Time: 2015 26 6
* **********************************************************************/
#include <iostream>
using namespace std;
class A
{
public:
	A(int x=int(),int x1=int(),int x2=int()):p_data(x),data(x1),m_data(x2)
	{

	}
	void show(int x)const
	{
		cout<<data+m_data-x<<"\n";
	}
	void show()
	{
		cout<<"data of protected: "<<data<<"  data of private: "<<m_data<<"\n";
	}

	int p_data;
protected:
	int data;
private:
	int m_data;
};
//想要在私有继承中访问基类的公有数据与接口,可以使用访问声明,只给声明的数据或接口一个后门可以访问,保护了数据的安全性
class B :private A
{
public:
    B(int x=int(),int x1=int(),int x2=int()):A(x,x1,x2)
	{

	}
	A::show;//这只是以函数名作为重载函数的匹配到函数,注意这里只需要函数名
	A::data;//数据与函数原来是什么访问属性使用访问声明之后在派生类中还是原来的属性
};
void main()
{
  B b1(1,2,3);
  b1.show();
  b1.show(1);
 cout<< b1.data<<endl; ;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 06:12:39

C++数据访问声明的思考的相关文章

十步优化SQL Server中的数据访问(转载)

原文地址:http://tech.it168.com/a2009/1125/814/000000814758.shtml 故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户,你开始着手调查访问变慢的原因. 经过紧张的调查,你发现问题出在数据库上,当应用程序尝试访问/更新数据时,数据库执行得相当慢,再次深入调查数据库后,你发现数据库表增长得很大,有些表

微软-创建数据访问层

简介 https://msdn.microsoft.com/zh-cn/cc964016 作为web 开发人员,我们的工作总是在和数据打交道.我们创建数据库来存储数据,编写代码来检索并修改数据,并创建Web 页面来收集和汇总数据.这是探讨在ASP.NET 2.0 中实现这些常用类型的技巧的系列教程中的首篇教程.我们从创建一个 软件架构 开始,包括使用Typed DataSet 的数据访问层(DAL) .实现自定义业务规则的业务逻辑层(BLL) 和共享同一页面布局的ASP.NET 页面组成的表示层

C#连接层的数据访问类(简单版)

目前只写了与SqlServer的数据处理. 首先是静态工厂类. using System; using System.Configuration; namespace XPSoft.BaseLibrary.DataAccess { /// <summary> /// 数据访问对象的静态工厂类,用于创建不同类型的数据访问对象. /// </summary> public static class DataAccessFactory { /// <summary> ///

企业级应用框架(二)三层架构之数据访问层的封装与抽象

接上一篇我们来对数据访问层进行封装与抽象.在上一篇我们知道,要解除BLL对DAL的依赖,我们就必须抽象出DAL层的接口,同时基于DAL的数据访问技术很多,如EF,ADO.NET,LINQ TO SQL,因此,我们的数据访问层必须对这些技术提供相应的支持.所以今天我们要做的事情有两件,第一,定义我们的数据访问层接口:第二,屏蔽各类数据库访问技术的差异,提供统一的数据库访问模型.举个例子,我们只需要修改一下我们的配置文件,就能够把ADO.NET的实现方式,改变成EF的实现方式.好下面搭建我们的三层构

Spring 4 官方文档学习(十)数据访问之JDBC

1.Spring框架JDBC的介绍 Spring JDBC - who does what? 动作 Spring 你 定义连接参数   是 打开连接 是   指定SQL语句   是 声明参数,提供参数值   是 准备.执行语句 是   迭代结果(如果有) 是   操作每个迭代   是 处理任何异常 是   处理事务 是   关闭连接.语句.结果集 是   一句话,Spring框架负责所有的低级别细节操作. 1.1.选择JDBC数据库访问的路径 所有的路径都需要兼容JDBC 2.0的驱动,部分特性

谈一谈:抽象工厂+反射+配置文件 实现数据访问程序

<大话设计模式>中第15章中<就不能不换DB吗?>引出了我今天要谈论的主题:抽象工厂+反射+配置文件 实现数据访问程序.当时也不甚理解啊!到了机房收费的亲身实践中,终于体会到了这对组合的奥秘. 抽象工厂模式(Abstract Factory) 提供一个创建一系列相关或相互依赖对象的接口,而无需制定它们具体的类.知道它是用来创建工厂的就OK了. 反射 提供了封装程序集.模块和类型的对象.这里仅仅用到反射的一部分功能.且记住它的格式: Assembly.Load("程序集名称

Entity Framework 4 in Action读书笔记——第一章:数据访问重载:Entity Fram

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 写在之前的话 在深入研究实体框架的细节之前,我们先讨论从传统的DataSet方法转换到基于对象的方法实现数据访问所带来的便利,以及这两种方法不同的工作方式是怎样导致采用像Entity Framework这样的O/RM工具. 使用Dataset和

数据访问-----ADO.NET 小结和练习

ADO.NET两个命名空间,三个类.一.两个命名空间:using System.Data;using System.Data.SqlClient; 二.三个类:SqlConnection    SqlCommand    SqlDataReader (一)SqlConnection链接类1.构造链接字符串的写法:server=服务器IP或服务器名;database=数据库名;uid=用户名;pwd=密码server=.;database=mydb;uid=sa;pwd=123Data Sourc

java中内部类的创建四种情况,三种方式,及内部数据访问权限

内部类和外部类的关系,及内部静态类的数据访问权限,声明方式. 第一种,在外部类内部声明使用内部类,内部类的类型为static和非 static类型,内部类数据类型为private,protected,public 类型的访问权限.外部类为非静态声明和权限如下: package com; public class Test1 { //@author 张春蕾 private class Name{ private int i =1; public int s = 2; protected int m