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

深圳营销型网站建设设计公司网站制作便宜

深圳营销型网站建设设计公司,网站制作便宜,网站建设需要学什么语言,网页设计网站开发需要什么软件在C中,多态主要通过虚函数(virtual function)和继承机制来体现。多态分为两种:编译时多态(静态多态)和运行时多态(动态多态)。在C中,运行时多态是多态的主要体现形式&…

在C++中,多态主要通过虚函数(virtual function)和继承机制来体现。多态分为两种:编译时多态(静态多态)和运行时多态(动态多态)。在C++中,运行时多态是多态的主要体现形式,而编译时多态更多地体现在函数重载和模板机制中。

1. 运行时多态(动态多态)

运行时多态是通过虚函数和继承机制实现的,具体体现在以下几个方面:

(1)虚函数(Virtual Function)

虚函数是实现多态的关键机制。当一个类中声明了虚函数后,派生类可以重写(override)这个虚函数,从而在运行时根据对象的实际类型调用对应的函数。

  • 基类中声明虚函数

    class Base {
    public:virtual void show() {cout << "Base show()" << endl;}
    };
  • 派生类重写虚函数

    class Derived : public Base {
    public:void show() override { // 使用override关键字可以增强代码可读性cout << "Derived show()" << endl;}
    };
  • 运行时调用

    int main() {Base* ptr;Derived d;ptr = &d;ptr->show(); // 输出:Derived show()return 0;
    }

在上述代码中,ptr是一个指向Base类型的指针,但它实际指向的是Derived类型的对象。当调用ptr->show()时,程序会根据ptr指向的对象的实际类型(Derived)来调用对应的show()函数。这就是运行时多态的体现。

(2)纯虚函数(Pure Virtual Function)和抽象类(Abstract Class)

纯虚函数是一种特殊的虚函数,它没有具体的实现,派生类必须提供纯虚函数的实现,否则派生类也会成为抽象类。包含纯虚函数的类称为抽象类,不能实例化对象,但可以定义指向派生类对象的指针或引用。

  • 定义抽象类

    class AbstractBase {
    public:virtual void show() = 0; // 纯虚函数
    };
  • 派生类实现纯虚函数

    class ConcreteDerived : public AbstractBase {
    public:void show() override {cout << "ConcreteDerived show()" << endl;}
    };
  • 运行时调用

    int main() {AbstractBase* ptr = new ConcreteDerived();ptr->show(); // 输出:ConcreteDerived show()delete ptr;return 0;
    }

在上述代码中,AbstractBase是一个抽象类,不能直接实例化对象。ConcreteDerived继承自AbstractBase并实现了纯虚函数show()。通过指向ConcreteDerived对象的AbstractBase类型的指针ptr调用show()函数时,会调用ConcreteDerived类中的实现。

2. 编译时多态(静态多态)

编译时多态主要通过函数重载(Function Overloading)和模板(Template)来实现。

(1)函数重载

函数重载是指在同一个作用域中,允许定义多个同名函数,只要它们的参数列表(参数个数、类型或顺序)不同即可。编译器根据调用时的参数类型和个数来选择合适的函数版本。

void print(int a) {cout << "print(int): " << a << endl;
}void print(double a) {cout << "print(double): " << a << endl;
}void print(int a, int b) {cout << "print(int, int): " << a << ", " << b << endl;
}int main() {print(10); // 调用print(int)print(3.14); // 调用print(double)print(5, 6); // 调用print(int, int)return 0;
}

在上述代码中,print函数有多个重载版本,编译器根据调用时的参数类型和个数选择合适的函数版本。这种多态是在编译时确定的,因此称为编译时多态。

(2)模板

模板是一种编译时多态的机制,允许在编译时生成不同类型的代码。模板可以分为函数模板和类模板。

  • 函数模板

    template <typename T>
    void print(T a) {cout << "print(T): " << a << endl;
    }int main() {print(10); // T为intprint(3.14); // T为doubleprint("Hello"); // T为const char*return 0;
    }
  • 类模板

    template <typename T>
    class Box {
    private:T value;
    public:void set(T val) {value = val;}T get() const {return value;}
    };int main() {Box<int> intBox;intBox.set(10);cout << "intBox.get(): " << intBox.get() << endl;Box<double> doubleBox;doubleBox.set(3.14);cout << "doubleBox.get(): " << doubleBox.get() << endl;return 0;
    }

在上述代码中,print函数模板和Box类模板都可以在编译时根据不同的类型参数生成对应的代码。这种多态也是在编译时确定的。

总结

  • 运行时多态:通过虚函数和继承机制实现,主要体现在基类指针或引用指向派生类对象时,调用虚函数会根据对象的实际类型动态地选择对应的函数版本。

  • 编译时多态:通过函数重载和模板实现,编译器根据调用时的参数类型和个数选择合适的函数版本,或者在编译时生成不同类型的代码。

运行时多态是C++中多态的核心体现,而编译时多态则更多地用于提高代码的灵活性和可复用性。

http://www.dtcms.com/wzjs/542218.html

相关文章:

  • 福州网站建设找时时在网络深圳app开发公司价格怎么算
  • 如何建立一个网站视频教学沧县住房和城乡建设局网站
  • 网站维护托管要多少钱绿化效果图怎么制作
  • 哈尔滨seo网站排名个人网站备案网站内容
  • 电子商务网站建设的作用wordpress 账号
  • 南昌专业制作网站微信小程序安装
  • 网站模版超市广告软文小故事800字
  • 网站优化比较好的公司用ps切片做网站能不能完成
  • 网站建设丶金手指下拉11网站icp查询系统
  • 舟山网站建设有哪些wordpress友情联机
  • 网站未备案做经营被罚款微信公众号网站开发注意
  • 门户网站首页模板下载权威的大良网站建设
  • 宽屏网站背景鞍山吧 百度贴吧
  • 网站后台修改网站首页怎么做返利网站建设哪个公司好
  • 机械网站 英文建设银行业务管理中心网站
  • 做网站无锡枞阳美好乡村建设办公窒网站
  • 山西做网站建设的平台wordpress母公司
  • 如何更改网站关键词中小企业网络组建
  • 网站优化入门免费教程在线crm平台
  • 怎样做医疗网站不违法电子商务营销手段有哪些
  • 怎么做货物收发的网站企业融资的三种方式
  • 淮安市建设局网站首页客户管理软件公司
  • 企业网站开发市场网站类型分类
  • 广西住建局官方网站深圳住房和建设局网站网上预约
  • 织梦模板网站好优化吗大型门户网站建设哪家好
  • 静态网页模板免费网站济南招聘网
  • 网站建设高等教育出版社企业网站如何做排名
  • 长春市网站建设茶叶外贸网站建设
  • 邯郸做网站优化如何做文档附网站
  • 怎么免费做自己的网站做网站最好的