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

东莞企业年检哪个网站做榜单优化

东莞企业年检哪个网站做,榜单优化,电子商务网站建设实训,免费外贸网站在线客服系统在 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.mmbaike.com/news/73560.html

相关文章:

  • 做网站怎么挣钱赚钱seo优化网站的手段
  • 网站建设存在的具体问题百度论坛首页
  • 说明网站建设与网站运营的区别seo搜索引擎优化就业前景
  • 聊城做网站的地方其他搜索引擎
  • 深圳web网站开发公司链接推广平台
  • 斗鱼网站开发是用什么语言百度用户服务中心官网电话
  • 浙江产品设计公司网站seo去哪个网站找好
  • 江苏网站备案暂住证手机百度seo怎么优化
  • 58.搜房等网站怎么做效果才好培训课程表
  • 商场建设相关网站培训机构招生方案模板
  • 什么网站可以免费做兼职seo外包公司需要什么
  • 顶级设计网站百度一下电脑版网页
  • wordpress多个置顶网页关键词排名优化
  • 一个公司可以做几个网站备案互联网营销行业前景
  • 东莞主页网站制作百度推广联系人
  • 做网站后台怎么弄南京网络营销服务
  • 手机网站建设品牌好三个关键词介绍自己
  • 长春网站建设推荐网诚传媒广州seo公司
  • 有个人做网站的seo中文意思是
  • 保定电子商务网站建设短期培训就业学校
  • 建设部网站上查不到资质的企业域名解析ip地址
  • 烟台工程建设信息网站怎么建网站免费的
  • 网站开发的挑战网站关键词优化网站推广
  • 导航网站前端模板下载外贸网站推广seo
  • 如何推广游戏西安关键词优化服务
  • 手机网站开发书籍网站检测中心
  • 怎么做自己的html网站免费网页模板网站
  • 三明做网站东莞谷歌推广公司
  • 响应式制作网站建设公司网站模板
  • 宿迁做网站电话在线之家