首页 > 编程语言 >C++多态

C++多态

时间:2023-11-13 23:33:43浏览次数:33  
标签:函数 int double age 多态 value Base C++

1、静态多态

(1)函数重载

 函数重载以参数的类型或数量不同来区分不同用途的同名函数。

不以返回值不同来区分函数。

编译器在调用函数时会在意函数的参数,不会在意函数的返回值。

int myAdd(int a, int b);
float myAdd(double a, double b);

(2)运算符重载

 使用关键字operator来重载函数的运算符,自定义运算符的功能。

可以用于结构体和类之间的运算。

类的运算符重载:

class Base {
public:
    Base()
    {
        name = "hany";
        age = 100;
        value = 666.666;
    }
    ~Base() {}
    Base operator+(const Base &);
    string name;
    int age;
    double value;
    double add(double a, double b);
};

Base Base::operator+(const Base &ccc)
{
    Base bbb;
    bbb.age = this->age + ccc.age;
    bbb.name = this->name + ccc.name;
    bbb.value = this->value + ccc.value;
    return bbb;
    operator+
}

int main(int argc, char **argv)
{
    Base b1;
    Base b2;
    Base b3 = b1 + b2;
    cout << b3.name << endl;
    cout << b3.age << endl;
    cout << b3.value << endl;
    return 0;
}

结构体的运算符重载 :

struct person {
    int age;
    double value;
};

struct person operator+(const struct person &a, const struct person &b)
{
    struct person c;
    c.age = a.age + b.age;
    c.value = a.value + b.value;
    return c;
}

int main(int argc, char **argv)
{
    struct person b1;
    struct person b2;
    struct person b3 = b1 + b2;
    cout << b3.age << endl;
    cout << b3.value << endl;
    return 0;
}

 

2、动态多态

(1)虚函数

 用virtual修饰的函数,在类的继承中采用动态继承的方式。

采用虚函数的base类不能实例对象。

在子类中可以再次定义虚函数相应的功能。

class Base {
public:
    Base()
    {
        name = "hany";
        age = 100;
        value = 666.666;
    }
    ~Base() {}
    string name;
    int age;
    double value;
    virtual double add(double a, double b) { return (a + b); }
};
class Derived : public Base {
public:
    Derived() : Base() {}
    virtual double add(double a, double b)
    {
        double c = a + b;
        cout << c << endl;
        return c;
    }
};

int main(int argc, char **argv)
{
    Derived der;
    der.add(1.1, 2.2);
    return 0;
}

// 类中的成员变量和成员函数默认是private访问权限

(2)纯虚函数

纯虚函数在虚函数后加“ = 0;”

= 0 告诉编译器,函数没有主体,上面的虚函数是纯虚函数

纯虚函数不能被直接继承调用,只能重写。

class Base {
public:
    Base()
    {
        name = "hany";
        age = 100;
        value = 666.666;
    }
    ~Base() {}
    string name;
    int age;
    double value;
    virtual double add(double a, double b) = 0;
};

class Derived : public Base {
public:
    Derived() : Base() {}
    virtual double add(double a, double b)
    {
        double c = a + b;
        cout << c << endl;
        return c;
    }
};

int main(int argc, char **argv)
{
    Derived der;
    der.add(1.1, 2.2);
    return 0;
}

(3)虚继承

标签:函数,int,double,age,多态,value,Base,C++
From: https://www.cnblogs.com/GREEN-FIEID/p/17829887.html

相关文章

  • C/C++知识补充
    运算符算术运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符运算符描述实例+把两个操作数相加A+B将得到30-从第一个操作数中减去第二个操作数A-B将得到-10*把两个操作数相乘A*B将得到200/分子除以分母B/A将得到......
  • Linux Ubuntu部署C++环境与VS Code编辑器
      本文介绍在LinuxUbuntu操作系统下,配置VisualStudioCode软件与C++代码开发环境的方法。  在文章VMware虚拟机中安装LinuxUbuntu操作系统中,我们介绍了LinuxUbuntu操作系统的下载、安装方法;本文则基于前述基础,继续介绍在LinuxUbuntu操作系统中配置VisualStudioCode软......
  • C++ 字符串类 string
    @TOC前言在C++中,字符串是一种常见的数据类型,用于存储和操作文本数据。C++标准库中提供了std::string类,它是一个功能强大的字符串类,提供了丰富的方法和操作符,使我们能够轻松地处理字符串。一、string类型概括std::string是C++标准库中定义的字符串类,它在<string>头文件中声明。它......
  • 【C++】【图像处理】均值滤波和高斯滤波(低通滤波)算法解析(以.raw格式的图像为基础进行
    1voidmeanFilter(BYTE*image,intwidth,intheight,BYTE*outImg)2{3//均值滤波4intsmth[9];5inti,j,m,n;6BYTEblock[9];78//高斯卷积核初始化9smth[0]=1,smth[1]=2,smth[2]=1,10smth[3]=2,......
  • C++界面库(十几种,很全)
    C++界面库是用于GUI界面设计的工具包,可以帮助开发人员快速开发出美观、易用的界面。在选择C++界面库的时候,开发人员需要根据项目要求、使用场景、开发难易程度以及所适配的操作系统等因素进行综合考虑。 下面列举了十几种常见的C++界面库,简单介绍它们的安装、使用、特点和适用......
  • 多态真的有用吗?使用在哪些场景?
    多态是面向对象编程(OOP)中的一个重要概念,它能够增加代码的灵活性和可维护性。多态的主要思想是同一个方法名在不同的类中有不同的实现,或者说同一个接口可以有多个不同的实现方式。让我们通过一个生动的例子来说明多态的用途。假设有一个图形类,其中包括圆形和矩形两个子类。每个图形......
  • Android C++ 打印(调用)堆栈
    C++Android12编译依赖库:libutilscallstack头文件:#include<utils/CallStack.h>代码:CallStackstack;stack.update();stack.log("TAG");打印callingpid#include<binder/IPCThreadState.h>IPCThreadState::self()->getCallingPid(); //占位用......
  • C++编程爬虫代码全过程分享
    以下是使用C++编写一个爬虫程序的基本步骤和代码示例:1、首先,我们需要包含必要的库文件。在这个例子中,我们将使用<iostream>、<string>和<curlpp/cURLpp.hpp>库。#include<iostream>#include<string>#include<curlpp/cURLpp.hpp>#include<curlpp/Easy.hpp>#include<curlpp/......
  • 【1111算法题】蓝桥杯 c++(一)第一二题
    【1111算法题】第一题双十一的祈祷【算法赛】题目双十—,不仅是购物狂欢节,更有"光棍节"之称。这源于11:11由四个1构成,象征着单身。作为大学生的小蓝也想经历甜甜的校园恋爱,于是他找到了爱神丘比特,向他祈祷能为自己带来—段邂逅。丘比特是乐于助人的,他承诺小蓝只要回答出一个简......
  • 归并排序C++实现
    把归并排序看作二叉树的后序遍历的确是一种好的思路,使代码的逻辑更加清晰。但是具体实现还是遇到了很多的困难。有太多报错,自己也觉得有些莫名其妙。但是事后看来,大多数还是自己粗心所致。以后都可以采用这个框架来处理需要归并排序的问题。classSolution{public:vect......