精华内容
下载资源
问答
  • 大家好,我是一名新手,最近在自学WPF,对着书敲了一遍代码,VS报错。 代码截图:!...错误说明: !... 已经遇到好几次这样的问题了,由于缺少对VS以及WPF的认识,不知道这种问题的根源是什么 希望各位前辈能解释一下,谢谢...
  • 对于结构体来说虽然所有的变量默认都是公有的,但是,如果想访问里面的成员变量,必须有包含对其结构的定义,否则出现如上的错误,c编译器将无法识别结构里面的变量。 一般想操作结构体里的成员变量,都是通过调用...
    • 对于结构体来说虽然所有的变量默认都是公有的,但是,如果想访问里面的成员变量,必须有包含对其结构的定义,否则出现如上的错误,c编译器将无法识别结构里面的变量。

    • 一般想操作结构体里的成员变量,都是通过调用结构体中定义的函数接口,来取得结构体中的值,如果想直接访问,在头文件或源文件中加入结构体的定义就行了。

    展开全文
  • 在父类中声明为私有的成员,虽然子类对象无法直接访问,但是在子类对象的内存结构中,父类私有的成员数据依然存在。 在没有提供构造函数的时候,系统会尝试提供默认的构造函数: 当子类中没有构造函数析构函数...
    •  识别类和类之间的关系

    在父类中声明为私有的成员,虽然子类对象无法直接访问,但是在子类对象的内存结构中,父类私有的成员数据依然存在。

     

    在没有提供构造函数的时候,系统会尝试提供默认的构造函数:

    当子类中没有构造函数或析构函数,而它的父类却需要构造函数与析构函数是,编译器会为这个子类提供默认的构造函数与析构函数。这是为了帮助父类对象完成初始化。同理,如果是子类对象的成员对象需要构造函数,那么系统也会为这个子类对象提供一个默认的构造函数。

    如果子类中存在构造函数,而父类中不存在构造函数。那么,如果父类中没有虚函数,就不存在初始化虚表的任务,那么编译器就不会为父类提供默认的构造函数。反之,如果父类中存在虚函数,需要初始化虚表指针,那么就会为父类提供默认的构造函数。

    子类对象被销毁时,为了能够调用父类的析构函数,编译器会为子类提供默认的析构函数。

    编译器提供默认的构造函数是基于两种需要:1、父类、成员对象、本类需要初始化虚表;2、父类、成员对象定义了构造函数,需要调用。

     

    子类对象在内存中的数据排列为:先安排父类数据,后安排子类新定义的数据。构造顺序为:先构造父类,后按照声明顺序构造成员对象和初始化列表中指定的成员,最后才是执行自身构造函数中的内容。

     

    • 构造函数内部虚函数失效问题

    举例:

     

    子类的构造函数会先调用父类的构造函数,并以子类对象的首地址作为this指针传递给父类的构造函数

    父类的构造函数中会有一步,把子类的虚表指针赋值为父类的虚表地址(目的是避免调用到子类的ShowSpeak,而是确保调用到父类的ShowSpeak):

    编译器发现这时虚表是父类的虚表,而这时的作用域也是在父类构造函数之内,所以就转换成了直接调用

    当你重新回到子类构造函数作用域中的时候,会重新给子类对象的虚表指针赋值:

     

     以上是构造函数中出现虚函数的调用。如果是成员函数中出现虚函数的调用呢?

     举例:

     

     两个Test中的ShowSpeak都是通过间接查找虚表来调用到虚函数的:

    这也解释了,为什么借助成员函数调用到的虚函数都是自身的那个虚函数了。

     如果是在构造函数中调用了一个成员函数,而这个成员函数中又调用了虚函数呢?

    举例:

    一上来调用CChinese的构造函数:

    调用父类的构造函数:

    调用父类构造函数中的Test时仍然使用的是子类对象的地址,但是会把子类对象的虚表指针的值赋值为父类的虚表地址:

    所以,尽管Test中的ShowSpeak是间接查虚表调用,但是仍调用到的是父类的虚函数:

     考虑另外一种情况,类对象直接调用虚函数:

    这如同调用普通 的成员函数,不会出现间接调用的情况,因为很明确是调用的哪个对象的函数:

    但是如果是类对象调用了一个虚函数,而虚函数中又调用了虚函数呢?比如:

    直接调用虚函数:

    虚函数内部间接调用另外一个虚函数:

    这时的Test()并没有传递指针参数,内部也不是通过指针调用的ShowSpeak(),所以就直接通过ecx查找到虚表并进行间接调用。否则,会设置一个虚表指针,根据虚表指针间接调用到正确的ShowSpeak。

     

    •  多重继承

    举例:

     

     构建CSofaBed的时候,先后构建两个父类:

    构建CSofaBed时前两个数据分别是CSofa的虚表地址和m_nColor,后三个数据分别是CBed的虚表地址和m_nLength、m_nWidth:

    两个虚表指向的内容分别如下:

    构建完两个父类之后,会重写这两个虚表地址的内容,并写入CSofaBed中独有的数据成员:

     三个数据被更改了:

     

    因为CSofaBed中覆写了CSofa中的两个虚函数,所以0x00d8cad4中所指的函数地址数组中有两个地址与0x00d8ca58中所指的三个函数地址有所不同,而第三个红线下边的函数是CSofaBed自定义的虚函数GetHeight:

    再来看0x00d8caec所指向的内容

     

     

    其实这里也是跳转到0x00d83a60.和第一个虚表的第一个虚函数(CSofaBed的虚析构函数)最终要执行的位置是一样的。

     再来看对CSofaBed进行析构的过程:

    先填写了CSofaBed中的两个虚表地址:

    然后再调用两个虚函数:

    ~CBed和~CSofa中又各自重新填写了虚表:

     

    提问,作为成员的类对象和继承下来的父类对象,在内存中的表现形式有什么区别?

    如果类没有虚函数,那么作为成员和作为父类,在内存中的表现形式几乎没有区别。但是如果有虚函数存在,就会有区别。举例:

    调用完两个父类的构造函数之后,会有两个虚表指针的写入:

    而随后的成员对象的构造函数被调用之后,没有虚表指针写入的步骤:

    •  抽象类

    在构建成员对象MemberSon的时候会先构建其父类Member:

    写入的虚表指针的第一项就是纯虚函数purefunc:

    来到了纯虚函数调用处:

    • 菱形继承

    举例:

     

    1、构造过程:

    构造CSofaBed会先压入一个1:

    进入CSofaBed的构造函数中发现,这里会有一个判断,这里的判断是为了防止重复构造Furniture。判断后,写入两个offset域到CSofaBed结构中,然后调用Furniture的构造函数:

    101DB60:

    101DB6C:

     

    调用完Furniture的构造函数之后,祖父类的内容在CSofaBed的内存结构中显现出来:

    随后构造Sofa:

    由于这里push的是0,所以Sofa的构造函数中会跳过对Furniture的构造,避免了重复构造:

    随后Sofa写入了自己的虚表地址和数据内容,同时借助offset更改了Furniture位置上的虚表指针的值(毕竟Sofa也重写了Furniture的虚函数):

    随后调用的CBed的构造函数同理,写入了自己的虚表地址,写入了自己的数据,覆写了Furniture位置上的虚表指针和数据:

     调用完CSofa和CBed的构造函数之后,写入自己的虚表指针,毕竟SofaBed也覆写了Sofa和Bed类中的虚函数:

    当然也要修改Furniture位置上的虚表指针的值:

     

     2、执行过程

    借助offset找到Furniture的位置:

    直接定位到Sofa的位置:

    同样也是直接定位到Bed的位置:

    借助offset调用到Furniture位置上的虚表中的虚函数:

    3、析构函数的调用

    现在CSofaBed中析构CSofa和CBed,然后再在后边析构CFurniture:

     

     

     

    • 虚继承多个父类的情况

    举例:

     

    内存布局如下:

    而且offset处会记录多个父类的偏移

     但是,如果有一个父类不是虚继承而来的,比如:

     

    那么存放offset的位置也会变化(不再是紧接在虚表指针之后):

     先构建虚基类CFurniture:

    随后构建CSofa:

    这里可以看出,offset实际上是跟在CSofa的虚表以及父类CFurniture2的数据成员7之后的。因为实际上这个虚表指针0eda74和数据成员7是其父类Furniture2的成员,只不过CSofa覆写了这个虚表指针而已。

    随后会构造CBed:

    同样,offset是排在CBed中的父类CFurniture2的内容(一个Furniture2的虚表指针和一个Furniture2的数据成员)的后边。

     最后写入CSofaBed的数据成员,构建完毕:

    而此时查看offset中的内容:

    只记录了一个父类的偏移。所以我们可以得出结论:offset中只记录虚基类的偏移,不记录父类的偏移

     

    转载于:https://www.cnblogs.com/predator-wang/p/8078421.html

    展开全文
  •  0022 设备无法识别该命令。  0023 数据错误(循环冗余检查)。  0024 程序发出命令,但是该命令的长度错误。  0025 驱动器在磁盘上无法定位指定的区域磁道。  0026 无法访问指定的磁盘软盘。  ...
  • RAID5服务器磁盘阵列故障分析

    千次阅读 2017-07-27 08:15:30
    这里说的RAID-5故障数据恢复,是指RAID-5逻辑盘丢失不可访问。... RAID控制器如果出现物理故障,将不能被计算机识别,也就无法完成对RAID-5中各 个物理成员盘的控制,在这种情况下,通过RAID控制器虚拟出来

    这里说的RAID-5故障数据恢复,是指RAID-5逻辑盘丢失或不可访问。服务器RAID-5出现故障后在数据没有完全备份的情况下切记不可对离线硬盘就是强制上线或重建等操作,这会对服务器数据恢复是不可逆的,导致RAID-5故障的原因主要有以下几种:


    RAID-5故障数据恢复


      RAID-5故障数据恢复

      一,故障的原因:

      1.RAID控制器出现物理故障

      RAID控制器如果出现物理故障,将不能被计算机识别,也就无法完成对RAID-5中各 个物理成员盘的控制,在这种情况下,通过RAID控制器虚拟出来的逻辑盘自然就不存在了。

      2.RAID信息出错

      RAID控制器将物理盘配置为RAID-5后,会生成一些参数,包括该RAID-5的盘序、 条带大小、左右结构情况、同步异步情况、RAID-5在每块物理盘中的起始地址等,还会记录有关该RA1D-5的相关信息,包括组成该RAID-5的物理盘数目、物理盘的容量大小等, 所有这些信息和参数就被称为RAID信息,也称为RAID元数据,它们会被保存到RAID 控制器中,有时候也会保存到RAID-5的成员盘中。

      RAID信息出错就是指该RAID-5的配置信息和参数出现错误,导致RAID程序不能正 确地组织管理RAID-5中的成员盘,从而导致RA1D-5逻辑盘丢失或不能访问。

      3.RAID-5成员盘出现物理故障

      RA1D-5可以允许其中一块成员盘离线而不影响数据的完整性,如果RAID-5中的某一 块成员盘出现物理故障,比如电路损坏、磁头损坏、固件损坏、出现坏扇区等,该成员盘 就不能正常使用,但剩下的成员盘可以利用异或运算计算出离线成员盘中的数据,所以 RAID-5还不会崩溃。

      如果系统管理员没有及时替换出现故障的成员盘,当再有一块成员盘出现故障离线后, RAID-5将彻底崩溃。

      4.人为误操作

      如果误将RAID-5中两块以上成员盘同时拔出,或者给RAID-5除尘时将成员盘拔出后 忘了原来的顺序,以及不小心删除了 RAID-5的配置信息等,都会造成RAID-5崩溃。

      5.RAID控制器的稳定性

      RAID-5的数据分布结构中有校验块的存在,当RAID-5中有成员盘离线时,算法将变 得更加复杂,RAID控制器将会工作在一个比较吃力的状态。而RAID控制器的负载太重便 会极大地增加数据读写时出现I/O滞留的可能性,从而导致更多成员盘离线,或者导致 RAID信息出错。

      二,RAID-5故障案例

      一台是在2000年购买的HP LH6000的服务器,4块18GB的硬盘做成RAID 5磁盘阵列,其阵列卡是NetRaid; 另一台是2006年购买的HP ProLian ML370服务器,4块146GB的硬盘做成RAID 5磁盘阵列,其阵列卡是Smart Array 642并带有热备份硬盘(Hot Spare)。两者操作系统都为Window 2000,数据库是Server 2000。

      HP LH6000的故障如下: 一块硬盘红灯闪亮,机器还在正常运行,但没有多久,系统就不能正常运行,这时才发现另一块硬盘的红灯也在闪亮。

      三,RAID-5故障数据恢复解决办法

      1. 启动服务器,自检至阵列时按Ctrl+M进入NetRaid管理程序。查看阵列信息,发现硬盘状态为Failed,运用修改配置将一硬盘强行设置成OnLine。重新启动服务器,在进入系统前的硬件自检时无效,启动失败。

      2. 启动服务器,自检至阵列时按Ctrl+M进入NetRaid管理程序。选择磁盘阵列,将原来OnLine挂起来的硬盘手工Fail掉,然后再把另一块Failed的硬盘手工设置成OnLine,重新启动服务器就可以进入系统了。

      3. 查看系统及数据库都运行正常后,再进阵列配置工具把Failed的硬盘手工设置成Rebuild,100%完成重建后再重启服务器,所有的阵列及系统都恢复原状了。

      笔者所在单位另一台运行ERP系统的服务器(HP ProLiant ML370),由4块146GB热插拔硬盘通过RAID卡(Smart array阵列卡)配置成一台具有RAID 5级的磁盘阵列。其中一块硬盘在运行过程中突然出现故障。服务器RAID 5自动启用热备份硬盘(Hot Spare),对损坏硬盘进行逻辑替代。整个硬盘的数据访问任务仍然完整地运行在原来的读写进程序列中,应用程序和数据库没有发生影响。

      通过HP自带的ACU工具查看硬盘状态进行检查,发现红灯示警的硬盘处于脱机状态。如果HP ProLiant服务器中的Raid 5有两块硬盘出现亮红灯时,表明系统已经崩溃,数据库也就不能访问,但系统不会自动关机。当第二块硬盘亮红灯后,用常规的手段是不能恢复数据的,只有付费找专业的第三方数据恢复公司恢复数据。

      因此,对惠普老型号HP LH6000系列服务器来说,阵列的设计方面与现在HP ProLiant系列服务器的阵列有很多不同。就操作方法看,HP LH6000服务器的阵列操作方法有很多可选项,包括阵列失败后可以重新删除阵列并重建等,初始化也是手工选择的。但是HP ProLiant系列服务器阵列的初始化是在配置阵列后自动在后台执行的,所以ProLiant系列服务器在阵列出错后是不能重配阵列的。

      HP LH6000服务器会因其他意外的原因导致阵列中的磁盘出现掉线现象,可让维护人员手工选择用Online或Offline、Rebuild等来恢复数据。但是现在的HP ProLiant系列服务器在阵列中不会再出现像老的服务器那样有磁盘掉线的现象,所以硬盘亮红灯的时候,这块硬盘基本上是损坏了需要更换。当然可以选择热插拔硬盘来重建(Rebuild),看硬盘还能不能再用一段时间。

      四,做好RAID-5技术后备

      从以上两个例子可以看出,同一品牌、不同系列的服务器因其内含技术的不同,其Raid 5磁盘故障的排除也是不同的。但经过重建(Rebuild)数据后,数据被拯救了,从中可以得出以下经验:

      我们认为任何先进的技术手段都不是万无一失的。如果要确保数据安全,就一定要做好备份工作,最好每天做一次数据库的异地备份。至少备用一块新硬盘。需要指出的是,加入阵列的硬盘必须大于或等于故障硬盘的容量。

      如果条件允许,推荐“RAID 5+热备盘”的阵列创建方案。这样在数据丢失前,我们有两次更换硬盘的机会。对于一般的应用,只用RAID 5即可,可以同时提供数据的存取性能、可靠性和最大的磁盘空间。

      管理员必须经常观察阵列的状态,包括查看磁盘阵列的黄色警告灯和管理软件里的驱动器状态。出现故障,及时排除。无论是什么级别的阵列,在排除故障前,都应做好数据备份。

    展开全文
  • C++图书馆管理系统

    2015-08-30 10:07:44
    图书馆流通管理软件 ...根据上面对的图书馆流通管理系统的分析,在图4.18中,用科德标记法表示Item, Reader, Manager, Loan四个类,它们的数据成员及其类型、函数成员的原型都在图中标出,但无法标出它们的访问权限。
  • IIS6.0 IIS,互联网信息服务

    热门讨论 2010-08-23 21:20:55
    比如你本机只有一个IP地址为192.168.0.1,你已经建立(设置)好了两个Web站点,一个是“默认Web站点”,一个是“我的第二个Web站点”,现在你想输入“www.enanshan. com”可直接访问前者,输入“www.popunet. com...
  • ● 多态、虚函数和RTTI(运行阶段类型识别)。 ● 函数重载。 ● 引用变量。 ● 通用(独立于类型的)编程,这种技术是由模板和标准模板库(STL)提供的。 ● 处理错误条件的异常机制。 ● 管理函数、类和变量名的...
  • (类似于QQ群概念一样,进入群组的人可以像共享文件夹一样分享、共享、下载文件,可设置权限,如群组创建者可设置群组成员只允许查看、下载文件,但不允许其它人员上传分享文件) 6.支持压缩包在线查看功能。直接...
  • ● 多态、虚函数和RTTI(运行阶段类型识别)。 ● 函数重载。 ● 引用变量。 ● 通用(独立于类型的)编程,这种技术是由模板和标准模板库(STL)提供的。 ● 处理错误条件的异常机制。 ● 管理函数、类和变量名的...
  • (类似于QQ群概念一样,进入群组的人可以像共享文件夹一样分享、共享、下载文件,可设置权限,如群组创建者可设置群组成员只允许查看、下载文件,但不允许其它人员上传分享文件) 6.支持压缩包在线查看功能。直接...
  • ● 多态、虚函数和RTTI(运行阶段类型识别)。 ● 函数重载。 ● 引用变量。 ● 通用(独立于类型的)编程,这种技术是由模板和标准模板库(STL)提供的。 ● 处理错误条件的异常机制。 ● 管理函数、类和变量名的...
  • ● 多态、虚函数和RTTI(运行阶段类型识别)。 ● 函数重载。 ● 引用变量。 ● 通用(独立于类型的)编程,这种技术是由模板和标准模板库(STL)提供的。 ● 处理错误条件的异常机制。 ● 管理函数、类和变量名的...
  • X-Scan v3.1

    2018-10-22 08:43:03
    A:操作系统识别方面确实不能保证100%的准确率,目前是综合NMAP、P0F的指纹库、NETBIOS信息和SNMP信息进行识别,如果目标机器没有开放NETBIOS和SNMP协议,TCP/IP堆栈指纹也不在数据库中,就需要使用者根据其他信息...
  • x-SCAN -V3.3-CN.

    2010-01-16 16:11:23
    A:端口扫描中的“SYN”方式在NT4XP+SP2系统下无法使用,在windows 2000等系统下使用时必须拥有管理员权限,否则将自动改用“TCP”方式进行端口扫描。 Q:新版本是否兼容2.3版本的插件? A:X-Scan 3.0以上...
  • x-scan3.3扫描工具

    2009-05-10 08:35:14
    A:端口扫描中的“SYN”方式在NT4XP+SP2系统下无法使用,在windows 2000等系统下使用时必须拥有管理员权限,否则将自动改用“TCP”方式进行端口扫描。 Q:新版本是否兼容2.3版本的插件? A:X-Scan 3.0以上...
  • 强大的扫描工具x-scan

    2009-11-13 23:17:02
    A:端口扫描中的“SYN”方式在NT4XP+SP2系统下无法使用,在windows 2000等系统下使用时必须 拥有管理员权限,否则将自动改用“TCP”方式进行端口扫描。 Q:新版本是否兼容2.3版本的插件? A:X-Scan 3.0以上...
  • X-Scan

    热门讨论 2008-04-04 15:19:43
    用于检测弱口令用户 /dat/*_pass.dic -- 密码字典,用于检测弱口令用户 /dat/p0f*.fp -- 识别远程主机操作系统所需的操作系统特征码配置文件(被动识别) /dat/nmap-os-fingerprints -- 识别远程主机...
  • protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 在同一命名空间内可以访问。 2 .列举ASP.NET 页面之间传递值的几种方式。 答. 1.使用QueryString,...
  • Microsoft SQL Server 2005 Express Edition SP3

    热门讨论 2012-03-04 10:55:14
    但是,SQL Server Express 无法在 Windows Server 2003 域控制器中像本地服务网络服务那样运行。SQL Server 服务帐户应以 Windows 域用户帐户的身份运行。您也可安装 SQL Server 服务帐户以本地系统的身份运行,...
  • 什么是VLAN

    2013-10-23 09:59:12
    而且这种划分的方法也导致了交换机执行效率的降低,因为在每一个交换机的端口都可能存在很多个VLAN组的成员,这样就无法限制广播包了。另外,对于使用笔记本电脑的用户来说,他们的网卡可能经常更换,这样,VLAN就...
  •  Visual Assist X是一款非常好的Microsoft Visual Studio 2005和Visual Studio .NET插件,支持C/C++,C#,ASP,Visual Basic,Java和HTML等语言,能自动识别各种关键字、系统函数、成员变量、自动给出输入提示、...
  • 11.3.1 成员运算符和非成员运算符 238 11.3.2 混合模式算术 239 11.3.3 初始化 240 11.3.4 复制 241 11.3.5 构造函数和转换 242 11.3.6 文字量 243 11.3.7 另一些成员函数 243 11.3.8 协助函数 244 11.4 ...
  • 11.3.1 成员运算符和非成员运算符 238 11.3.2 混合模式算术 239 11.3.3 初始化 240 11.3.4 复制 241 11.3.5 构造函数和转换 242 11.3.6 文字量 243 11.3.7 另一些成员函数 243 11.3.8 协助函数 244 11.4 ...
  • 他独自写作参与合著了好几本书,包括SQL in a Nutshell(O'Reilly,2004)、Pro SQL Server 2005 Database Design and Optimization(Apress,2006)以及Database Benchmarking:Practical Methods for Oracle&SQL;...
  • 他独自写作参与合著了好几本书,包括SQL in a Nutshell(O'Reilly,2004)、Pro SQL Server 2005 Database Design and Optimization(Apress,2006)以及Database Benchmarking:Practical Methods for Oracle&SQL;...
  • C++程序设计语言(特别版)--源代码

    热门讨论 2012-04-23 07:33:51
    11.3.1 成员运算符和非成员运算符 238 11.3.2 混合模式算术 239 11.3.3 初始化 240 11.3.4 复制 241 11.3.5 构造函数和转换 242 11.3.6 文字量 243 11.3.7 另一些成员函数 243 11.3.8 协助函数 244 11.4 ...
  • Android 上百实例源码分析以及开源分析 集合打包4

    千次下载 热门讨论 2012-07-10 21:54:03
    3、 源码分析之前,需要认真学习一下Jade的Android的编程(有聊天程序源码下载,都在下载包中),编译源码,需要到google 中申请 map api 的key,不过由于神奇的国度制约的原因,申请连接的网站无法访问,需要通过...

空空如也

空空如也

1 2 3
收藏数 47
精华内容 18
关键字:

无法识别或访问成员