C++ VS C (13) 隐藏基类方法,部分类定义

C/C++面试八股文汇总 以对象管理资源,利用的就是C++构造的对象最终会被对象的析构函数销毁的原则。上述的的申请、使用、释放资源的程序较为简单,但是如果程序很复杂的时候,需要为所有的new 分配的内存delete掉,导致极度臃肿,效率下降,更可怕的是,程序的可理解性和可维护性明显降低了,当操作增多时,处理资源释放的代码就会越来越多,越来越乱。栈在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。 阅读详情
               

//=====================================================================
//TITLE:
//    C++ VS C#(13):隐藏基类方法,部分类定义
//AUTHOR:
//    norains
//DATE:
//    Monday  04-April-2011
//Environment:
//    Visual Studio 2010
//    Visual Studio 2005
//=====================================================================

 

1. 隐藏基类的方法

 

    对于隐藏基类的方法,无论是C++还是C#,都有相同的一面,就是派生类要隐藏的方法名和基类一致即可,如下C++代码所示:
//C++class CBase{public: int Add(){};};class CDerived: public CBase{public: int Add(){};};

 

    C#的也大同小异,如下所示:
//C#class CBase{ public void Add() { }};class CDerived: CBase{ public void Add(){}    };

 

    在语法上并无不同,唯一的区别只在于编译器。C++会没有任何警告通过,而C#则是会发出警告。C#对于警告不会置之不理,它用来提醒程序员,是不是有些东西忘记了?如果想消除这个警告,应该函数前增加new关键字,如下所示:
  class CBase  {   public void Add() { }  };    class CDerived: CBase  {   new public void Add(){}    //增加new关键字,消除编译器警告  };
  
    简单点来说呢,只要基类和派生类的函数名相同,但没有额外的修饰符,那么编译器就会提醒你,让你查看一下,是不是留下了什么隐患。当然,消除这个警告,还可以采用重载的方式,两者的区别在于:重载的话,通过基类访问的是派生类的函数;而隐藏的话,访问的还是基类的。所谓的隐藏,只是针对派生类而言。

 


2. 部分类定义

 

    如果想将一个类的不同功能分块,那么这两种语言又会有何种差异呢?
  
    对于C++来说,无非就是在h文件中声明,在cpp中实现。如果还要细分,那完全可以多个不同功能的cpp文件包含同一个h文件。因此,功能模块的细分相对于C++,只不过是文件的结构布局不同而已。
  
    但情形之于C#,那么情况就大为不同。因为C#没有什么头文件之说,所有的都是*.cs后缀的文件。那么,C#该如何做到功能的分离呢?在这方面,C#上升到了语言的层次,产生了partial关键字。简单来说,partial就是使用部分类定义,是类的定义放在多个文件中。例如,可以将字段啊,属性之类放到一个文件,而把方法放到另一个文件。而这一切所需要做的是,在每个包含部分类定义的文件中使用partial即可,如下所示:
   public partial class MyClass   {    ...   } 
   
    有点需要注意的是,应用于部分类的接口也会作用于整个类。换句话说,如果我们的部分类是这样定义的:
   public partial class MyClass:IMyInterface1   {    ...   }      public partial class MyClass:IMyInterface2   {    ...   } 
   
    它其实和如下的完整定义是等价的:
   public partial class MyClass:IMyInterface1,IMyInterface2   {    ...   } 

   
     另外还有一点,partial关键字也可以用在定义函数方法。但这对函数有明确的限制,就是函数不能有返回值,而并且参数不能为out形参。并且,用partial修饰过的函数,还不能和virtual、abstract、override、new、sealed和extern一同使用。
  
    除此以外,partial修饰函数的时候,还有一个非常重要的特性。编译代码时,如果代码中调用了使用partial修饰的函数,编译器会检查该函数是否真正有实现代码。如果没有找到实现代码,那么编译器会删除这个被partial修饰的函数的所有调用。
  
    C#用partial修饰函数的方式,感觉上和C++宏的一种用法有点像。很多程序员为了测试的需要,会在代码中添加某些宏的调用;当程序稳定了,不再需要这种耗费性能的宏的时候,就会将宏定义为空。所不同的是,宏是需要程序员手工定义为空,而partial则是编译器自动完成。当然,这也仅仅是其中一个用法思路上的相似而已,partial和宏其实并不是一样的东西。

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow

毫无编程基础的小白准备学习C语言,用VC6还是VS2015? 地方就在不久之前,无论是VC6还是VS2015都不适合学习C语言,因为两者对C根本没有好好支持,都是针对C++的IDE。然而最近VS2015 Update 1新增了用clang作为前端的选项,它对C99有良好的支持,再加上VS方便的编辑调试体验,你终于可以享受了。 新建项目后,打开项目属性,然后在toolset中选取clang即可。 补充一下具体操作,首先你需要安装Visual Studio w... 阅读详情

相关推荐

类的概念、成员函数的定义方式、类的访问控制和封装、类的大小、this指针

文章目录类的概念structclassclass和struct的区别是什么呢?类中成员函数的两种定义方式声明和定义都在类中声明和定义分离类的访问控制和封装类的封装特性类的大小结构体内存对齐规则类的存储方式this指针 类的概念 在C++中,类可以说是最重要的东西,因为C++一开始的定位就是c with class,也正是因为引入了类,才让c++从c的面向过程思想转变为面向对象的思想,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 C++有两种能够创建类的方法 struct 第一种是str

Jormungand_V的博客 1039

C++ VS C#(13):隐藏基类方法,部分类定义

C++和C#在隐藏基类方法中的区别,以及C#特殊的partial关键字

norains的专栏 9666

VS Code 配置 C/C++ 开发环境:Windows 与 Linux 跨平台调试编译闭环

C/C++ 在 VS Code 中并非开箱即用,其本质是编辑器通过外部工具链(如 gcc/gdb)实现编译、调试与智能感知。理解编译器、调试器与配置文件(tasks.json/launch.json/c_cpp_properties.json)三者协同原理,是构建可靠开发流的基础技术前提。该配置方案兼顾 Windows 下 MinGW-w64 工具链集成与 Linux 下 apt/yum 原生工具部署,特别解决 Snap 版 VS Code 的头文件路径、沙盒调试权限等高频工程陷阱,并支撑 C++20 等现

weixin_34176694的博客 425

C++中派生类隐藏(非覆盖)基类方法

本人深入讲解了C++中派生类对基类虚函数覆盖和隐藏的区别

_Santiago的博客 1185

VS2010 + OpenCV + zxing-cpp:老环境二维码识别集成指南

二维码识别是工业自动化和旧系统升级中的常见需求,尤其在Visual Studio 2010这类老开发环境中,集成OpenCV与zxing-cpp常因版本兼容问题寸步难行。本文从编译器决定库版本上限的原理出发,解析VC10对C++11支持不足带来的连锁反应,说明为何必须选用OpenCV 2.4.13和旧版zxing-cpp,并给出完整的工程配置、Mat到ImageView的桥接转换以及实时扫码Demo。同时覆盖LNK1181、C1083等高频错误排查,帮助维护老项目的工程师快速构建可用的二维码识别模块。

weixin_31321361的博客 301

Windows+VS2019编译paho.mqtt.cpp完整指南与踩坑记录

MQTT作为物联网场景中最常用的轻量级消息传输协议,其客户端在跨平台工程中的集成一直是开发者关注的重点。paho.mqtt.cpp 是 Eclipse 官方提供的 C++ 客户端库,基于底层 C 库 paho.mqtt.c 实现协议细节,并依赖 OpenSSL 提供 TLS 加密能力,理解这条依赖链是成功编译的前提。在 Windows 平台下,使用 VS2019 编译该库时,需要正确配置 CMake 参数、处理静态库宏定义以及统一运行时库,否则极易出现链接错误。针对工业网关、边缘计算等需要原生 C++ 能力

weixin_33940469的博客 311

C++继承(6) - 隐藏基类中的所有重载函数

C++中,如果子类重新定义了基类中的成员函数,则基类中所有相同函数名的函数都会被隐藏起来。

855

论文阅读笔记---Deep HDR Video from Sequences with Alternating Exposures

Kalantari N K, Ramamoorthi R. Deep HDR Video from Sequences with Alternating Exposures[C]//Computer Graphics Forum. 2019, 38(2): 193-205. 摘要: 在本文中,提出了一种基于学习的方法来,我们使用两个顺序卷积神经网络(CNN)对整个HDR视频重建过程进...

qq_25283239的博客 1447

C++ 基类方法重载、重写、隐藏

【代码】C++ 基类方法重载、重写、隐藏。

IFONLY000的博客 692

tkinter使用label视频播放

tkinter是python的界面开发包 使用tkinter显示视频流的一个办法是使用label来逐帧显示图片。 from Tkinter import * from PIL import ImageTk, Image import cv2 root = Tk() # Create a frame app = Frame(root, bg="white") app.grid() # Create a label in the frame lmian = Label(app) lmain.grid(

六十英里的专栏 5527

基于Codex平台与AI Agent技能开发,实现抖音爆款视频分析与脚本自动生成

大家好,我是专注于AI应用开发的技术博主。最近在探索如何利用AI工具自动化内容创作时,我发现了一个非常有趣的组合:通过Codex平台创建自定义的Skill(技能),来批量分析抖音平台的爆款视频,并基于分析结果自动生成新的带货视频脚本。这听起来像是内容团队的“黑科技”,但实现起来其实有清晰的路径可循。本文将为你完整拆解这个实战项目,从环境搭建、Skill编写、数据抓取到视频脚本生成,手把手教你打造自己的“AI内容助理”。无论你是想了解AI Agent的开发,还是对短视频自动化创作感兴趣,都能从本文中获得可直接

weixin_34110749的博客 645

C#生成类库隐藏引用的dll,禁止外部调用

两个类库A和B,A引用了B,将A提供给外部进行二次开发,但不希望B被看到并直接调用(通过A封装B以限制B的使用)。

doris_d的专栏 4122

Axure rp9 中继器新建表格

Axure rp9 中继器新建表格

weixin_49295490的博客 1652

C++ Insights 扩展指南:13 个转换开关、3 个编辑器插件与自定义改造

C++ Insights 是基于 Clang 的源码转换工具,让你用编译器的视角看 C++ 代码。本文讲清它的 C++ Insights 扩展机制:内置转换开关、编辑器插件,以及添加自己转换的路径。 ## 痛点:for 循环背后的代码,你其实看不见 给学生讲 `for (auto& x : vec)`,或自己排查一个隐式转换报错时,代码表面很干净,编译器却把它展开成迭代器、引用和临时对象。打印

gitblog_00671的博客 1004

ZEMAX知识点:坐标间断面(coordinate break)

zemax知识点:坐标间断面

weixin_47638568的博客 1万+

【3D计算机视觉】从PointNet到PointNet++理论及pytorch代码

从PointNet到PointNet++理论及代码详解1. 点云是什么1.1 三维数据的表现形式1.2 为什么使用点云1.3 点云上以往的相关工作2. PointNet2.1 基于点云的置换不变性2.1.1 由对称函数到PointNet(vanilla)2.1.2 理论证明2.2 基于点云的旋转不变性2.3 网络总体结构2.4 实验结果和网络的鲁棒性2.5 代码解析3. PointNet++3.1...

小执着的博客 8万+

VS2017 C/C++输入密码显示*星号

VS2017 C/C++输入密码显示*星号 _getch()函数使用时遇到的坑 参考: https://blog.youkuaiyun.com/guin_guo/article/details/46237905 想实现输入密码不回显的功能,找到了上面一篇文章。上面那篇文章中的代码在dev里跑没有出现任何问题。 当我拿到VS2017里的时候,首先遇到的是getch()不安全,无奈...

awlrty0643的博客 1876

EPLAN中2D安装板的绘制方法示例

EPLAN中2D安装板的绘制方法示例

Robot_PLC_HMI_Automation 3221

C++ 类与对象(上篇)

class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。类在定义时又有两种方式。C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。【访问限定符说明】1. public修饰的成员在类外可以直接被访问。

2303_81060385的博客 1000

十八万字《python从零到精通教程》第二版,贴心保姆教你从零变大神,学不会找我

文章目录一.pycharm下载安装二.python下载安装三.pycharm上配置python四.配置镜像源让你下载嗖嗖的快4.1pycharm内部配置4.2手动添加镜像源4.3永久配置镜像源五.插件安装(比如汉化?)5.1自动补码神器第一款5.2 自动补码神器第二款5.2汉化pycharm5.3其它插件六.美女背景七.自定义脚本开头八、这个前言一定要看九、python入门十、python缩进十一、Python注释1.单行注释2.多行注释十二、Python 变量1.变量定义理解2. 变量名命名3. 分配多个

全栈川川 7万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

使用static关键字隐藏函数 [C]

使用static关键字隐藏函数 [C]           C语言中没有C++的public、private等关键字来限定函数的使用范围,也没有类的概念可以使用相同名字的函数。但是在C语言中使用static关键字可以达到函数隐藏的目的。下面有个简单的例子。 清单1 –hide_function.h #ifndef _HIDE_FUNCTION_H_ #define _HIDE_FUNC

DayDreamingBoy的专栏 2850

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C++类和对象——上

初始类和对象,掌握4个类里面重要的函数。

2403_87935067的博客 701

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

VS Code配置C语言开发环境:从原理到实践,告别Hello World运行失败

在软件开发中,集成开发环境(IDE)与代码编辑器的选择是开发者面临的首要决策。传统IDE如Dev-C++提供了开箱即用的编译、调试一体化体验,而现代编辑器如VS Code则遵循模块化设计哲学,通过扩展和配置文件实现高度定制。其核心原理在于将编辑器、编译器(如GCC/MinGW)、调试器(GDB)和构建工具链解耦,通过JSON配置文件(tasks.json, launch.json)进行串联。这种架构赋予了开发者对工具链的完全控制权与灵活性,尤其适合需要精细控制编译选项、多平台适配或嵌入特定构建流程的项目。对

weixin_33991418的博客 471
上一篇: 说说WinCE的WS EX TOPMOST和窗口置顶显示
下一篇: 在C++类中实现Windows窗口的创建
小树林后面
博客等级 码龄8年 21粉丝 248原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值