我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++的三则是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++的三则是什么

这篇文章主要介绍“C++的三则是什么”,在日常操作中,相信很多人在C++的三则是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++的三则是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型。

一、如无必要,勿增虚函数

比如我们有以下关于球的类层次设计 ,其中需要判断某种球是否是可以踢的(kickable):

class Ball  {  public:  virtual bool IsKickable() = 0;  };  class Football  {  public:  virtual bool IsKickable() {return true;}  };  class Basketball  {  public:  virtual bool IsKickable() {return false;}  };

乍一看觉得挺合理的,但仔细想想,其实IsKickable是某种球的本质静态属性,用一个虚函数来表示这种信息,是一种浪费,更加合理的方式应该是用一个数据成员和一个普通成员函数:

class Ball  {  public:  bool IsKickable(){return m_bIsKickable;}  protected:  bool m_bIsKickable;  };  class Football  {  public:  Football():bIsKickable(true){}  };  class Basketball  {  public:  Basketball():bIsKickable(false){}  };

类似这样的设计我碰到过至少两次,一次是被review,一次是review,结果都是改成了第二种我们认为比较合理的方式。

二、不要用 "||" 做复杂的逻辑判断

"||"是"或运算"符号,当你确实将其作为或运算时,的确很简单明了。但是有人发明了一种比较tricky的方法来使用它。

举个例子,我们的程序可能有三种状态:A, B,或者C,现在有一个变量bOk,如果程序当前状态为C的话,bOk必须为true,如何来assert?一般比较直观的做法是:

if(IsC()) assert(bOk);

但是有人觉得有个if判断比较麻烦,于是发明了:

assert(IsA() || IsB() || bOk);

逻辑理解为:如果不是A也不是B,那么bOk必须为true。虽然代码简化成只有单个语句,但是,这对理解却带来了挑战。
我们一般不推荐用这种不直观的方式来做判断。

三、纯虚函数与默认实现

有一个基类,我们期望它是一个抽象类,但同时我们又期望其虚函数都有默认实现。这其实一个语法层面的问题:我们是可以把一个虚函数设为纯虚的同时提供默认实现的。(但一开始以为不行,想去把构造函数设为pretected来达到类似的效果,但这样从概念上来讲就不是很合理了)

对于这种情况,我想也没必要把所有函数设为纯虚,找一个典型,如把析构函数设为纯虚并提供默认实现:

class Base  {  public:  virtual ~Base() = 0;  };  Base::~Base() {printf("~Base()\n");}  class Derive: public Base  {  public:  virtual ~Derive(){printf("~Derive()\n");}  }

这样,基类就已经是一个抽象类了,应该是一个可以接受的方案。

到此,关于“C++的三则是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++的三则是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++的三则是什么

这篇文章主要介绍“C++的三则是什么”,在日常操作中,相信很多人在C++的三则是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++的三则是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!虚函数的作
2023-06-17

python使用切片的三条规则是什么

这篇文章主要为大家展示了“python使用切片的三条规则是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python使用切片的三条规则是什么”这篇文章吧。1、切片赋值的第一条规则是,由于切片
2023-06-20

c#变量的命名规则是什么

c# 变量命名规则为:以字母或下划线开头,后续可包含字母、下划线或数字。区分大小写。最长 64 个字符。不能使用 c# 关键字。不能使用 @ 符号。变量名应清晰描述用途。避免使用缩写。保持一致性。C# 变量命名规则在 C# 中,变量命名遵
c#变量的命名规则是什么
2024-04-04

c++ decltype推导规则是什么

C++11引入了decltype关键字,用于推导表达式的类型。它的规则可以概括为以下几点:1. 如果表达式是一个标识符(变量名或函数名),则推导出它的类型。例如:`int x = 5; decltype(x)`的类型是int。2. 如果表达
2023-10-12

C++ 函数的语法规则是什么?

c++++ 函数的语法格式为:returntype functionname(parameterlist) {}, 包括返回类型、函数名称和参数列表三个组成部分。具体函数调用示例为计算阶乘的 factorial 函数,通过循环累乘得到阶乘结
C++ 函数的语法规则是什么?
2024-04-18

c语言char赋值的规则是什么

在C语言中,char类型的变量可以用单个字符来进行赋值。赋值规则如下:直接赋值:可以将一个字符赋值给char变量,例如:char c = 'A';转义字符赋值:可以使用转义字符来赋值,例如:char c = '\n'; // 赋值为换
2023-10-26

C语言中的命名规则是什么

本篇内容主要讲解“C语言中的命名规则是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言中的命名规则是什么”吧!一、常见命名规则  比较著名的命名规则,首推匈牙利命名法。这种命名方法,是由
2023-06-17

c语言数据转换的规则是什么

C语言中,数据转换的规则如下:1. 自动类型转换:当表达式中的操作数类型不同时,会发生自动类型转换。自动类型转换按照以下规则进行:- 如果两个操作数中有一个是`float`类型,则另一个操作数会被转换为`float`类型。- 如果两个操作数
2023-10-10

C++ 函数重载的匹配规则是什么?

c++++ 函数重载匹配规则如下:匹配调用中参数数量和类型。参数顺序必须一致。constness 和引用的修饰符必须匹配。可使用默认参数。C++ 函数重载的匹配规则函数重载是 C++ 中允许函数具有相同名称但不同参数列表的特性。当编译器遇
C++ 函数重载的匹配规则是什么?
2024-04-27

C++设计目标及原则是什么

这篇文章主要介绍“C++设计目标及原则是什么”,在日常操作中,相信很多人在C++设计目标及原则是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++设计目标及原则是什么”的疑惑有所帮助!接下来,请跟着小编
2023-06-17

c语言中三次方的函数是什么

c语言中求三次方的函数是 pow(),原型为:double pow(double base, double exponent)。其中 exponent 固定为 3,base 为待求三次方的数字。C 语言中的三次方函数C 语言中用于计算三次
c语言中三次方的函数是什么
2024-04-27

C++中唯一的三元运算符是什么

这篇文章给大家分享的是有关C++中唯一的三元运算符是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。C++三元运算符是?:C++有3种运算符:算数运算符、关系运算符和逻辑运算符。运算符在计算机中的执行顺序 运算
2023-06-14

c语言中负数取余的规则是什么

在C语言中,负数取余的规则是:- 如果被除数是正数,余数的符号与被除数一致。- 如果被除数是负数,余数的符号与被除数的符号相反。例如:- 5 % 3 的余数是 2- (-5) % 3 的余数是 -2- 5 % (-3) 的余数是 2- (-
2023-09-16

c语言中常量定义的规则是什么

本篇内容介绍了“c语言中常量定义的规则是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!c语言常量定义规则常量的定义:常量是指在程序运行过
2023-06-08

c语言中变量的命名规则是什么

C语言中变量的命名规则如下:1. 变量名只能由字母、数字和下划线组成。2. 变量名必须以字母或下划线开头,不能以数字开头。3. 变量名区分大小写。4. 变量名不能是C语言的关键字(保留字)。5. 变量名应具有描述性,能准确表达变量的用途。6
2023-08-18

C语言字符串的排列规则是什么

C语言中的字符串是由一系列字符组成的,以null字符('\0')作为结尾。字符串的排列规则是根据字符的顺序来决定字符串的排列顺序。具体来说,字符串的排列顺序是按照字符的ASCII码值从小到大的顺序排列的。例如,"abc"会排在"def"之
2023-10-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录