当前位置: 首页 > news >正文

东莞企业年检哪个网站做网站的优化和推广方案

东莞企业年检哪个网站做,网站的优化和推广方案,品牌网站建设绿d茶,电子商务网站建设的目标在 C 中,重定义继承而来的 non-virtual(非虚)函数通常是不推荐的,原因如下: 隐藏父类的实现:如果在派生类中重定义了一个非虚函数,这将隐藏父类中具有相同名称和参数的函数。这意味着即使通过基…

在 C++ 中,重定义继承而来的 non-virtual(非虚)函数通常是不推荐的,原因如下:

  1. 隐藏父类的实现:如果在派生类中重定义了一个非虚函数,这将隐藏父类中具有相同名称和参数的函数。这意味着即使通过基类的指针或引用调用该函数,也会调用派生类中的版本,这可能违反了多态性原则,导致无法调用预期的基类函数。

  2. 破坏封装:重定义非虚函数可能会导致派生类与基类之间的耦合增强,因为派生类需要知道基类的具体实现细节,并且在派生类中复制这些细节。这违反了封装的原则,使得代码难以维护和理解。

  3. 意图不明确:在派生类中重定义非虚函数可能会使类的设计意图变得不清晰。虚函数表明存在意图进行重写(override),而非虚函数通常表示不打算被重写。如果需要在派生类中提供不同的行为,应该使用虚函数。

  4. 多态行为的缺失:非虚函数不支持运行时多态,这意味着即便派生类中有与基类同名的函数,通过基类指针或引用调用该函数时,总是会调用基类的实现,而不是派生类的实现。这可能导致派生类的行为不符合预期。

  5. 维护难度增加:如果在派生类中重定义了基类的非虚函数,任何对基类函数的修改都需要在所有派生类中进行检查和相应的修改,这增加了代码的维护难度。

  6. 引起混淆:重定义基类中的非虚函数可能会使得阅读和理解代码的人员产生混淆,特别是在有多级继承时,理解哪个版本的函数被调用变得更加复杂。

如果确实需要在派生类中更改基类中某个函数的行为,应该考虑以下方案:

  • 将基类函数声明为虚函数(virtual),并在派生类中重写(override)它。
  • 如果不希望在基类中提供默认实现,可以将基类函数声明为纯虚函数(pure virtual)。
  • 如果派生类需要提供一个完全不同的函数,可以考虑给该函数取一个不同的名称,以避免与基类函数混淆。

让我们通过一个简单的例子来说明为什么不建议在派生类中重定义继承而来的 non-virtual 函数。

假设我们有一个基类 Base 和一个从 Base 继承的派生类 Derived。在基类中,我们有一个非虚拟函数 foo(),在派生类中我们重定义了这个函数。

#include <iostream>class Base {
public:void foo() {std::cout << "Base::foo()" << std::endl;}
};class Derived : public Base {
public:void foo() {std::cout << "Derived::foo()" << std::endl;}
};int main() {Base b;Derived d;// 直接调用b.foo(); // 输出: Base::foo()d.foo(); // 输出: Derived::foo()// 通过基类指针调用Base* ptr = &d;ptr->foo(); // 输出: Base::foo()return 0;
}

在上面的例子中,即使 ptr 指向的是 Derived 类型的对象,调用 ptr->foo() 时还是执行了 Base 类的 foo 方法,而不是 Derived 类的 foo 方法。这是因为 foo 被定义为非虚函数,不支持多态。

现在,假设我们想要实现多态行为,我们需要将 Base 类中的 foo() 方法声明为虚函数,并在派生类中重写它:

#include <iostream>class Base {
public:virtual void foo() {std::cout << "Base::foo()" << std::endl;}
};class Derived : public Base {
public:void foo() override { // 使用 override 关键字明确表示重写std::cout << "Derived::foo()" << std::endl;}
};int main() {Base b;Derived d;// 直接调用b.foo(); // 输出: Base::foo()d.foo(); // 输出: Derived::foo()// 通过基类指针调用Base* ptr = &d;ptr->foo(); // 输出: Derived::foo()return 0;
}

在这个修改后的例子中,由于 foo 现在是虚函数,并且在派生类中被重写,ptr->foo() 调用将执行 Derived 类的 foo 方法,展现了多态行为。

重定义可能会隐藏基类实现并导致预期外的行为,而将函数声明为虚函数并在派生类中重写可以实现正确的多态行为。

http://www.mnyf.cn/news/48174.html

相关文章:

  • 做内贸的有哪些网站重庆森林经典台词独白
  • 网站建设费包括什么网店营销策划方案ppt
  • 游戏网站开发文档淄博信息港聊天室网址
  • 怎么提交自己的网站个人博客网站
  • 丰浩网站建设中心计算机培训
  • 分享设计的网站网站怎么优化seo
  • 男技师做spa的视频网站倒油长春百度快速优化
  • 韶关做网站seo推广公司
  • 制作网站的商家湖南网站建设推广
  • 包头正大光电 做网站网络销售怎么做才能做好
  • 做景观设计比赛的网站哪里可以引流到精准客户呢
  • 网站建设实训个人总结1000字seo关键词优化软件合作
  • 专业做网站联系方式seo服务收费
  • 想开个小说网站怎么做百度知道首页
  • 手机网站 兼容最新新闻事件今天
  • 设备管理系统下载镇江百度关键词优化
  • 注册360建筑网平台seo最新
  • 建设淘宝网站的意义搜索引擎seo关键词优化效果
  • 网站添加客服怎么做长沙市网站制作
  • 宁波 网站建设电商具体是做什么的
  • 骨干专业建设验收网站百度网站站长工具
  • 上海英文网站建设公司如何软件网站优化公司
  • 网站建设7关键词搜索广告
  • 网站做反向代理后样式加载错误爱站网官网查询域名
  • 重庆包装设计公司网站seo入门基础教程
  • 怎么做有趣的微视频网站优化seo是什么
  • 网站的竞价怎么做公司推广渠道有哪些
  • 门头设计菏泽seo
  • 永年网站制作seo北京网站推广
  • wordpress站下所有标签东莞日增感染人数超25万