鱼C论坛

 找回密码
 立即注册
查看: 2512|回复: 0

[技术交流] C++(14th for three):覆盖与重载

[复制链接]
发表于 2021-2-18 20:09:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
覆盖

我们知道,当子类采用继承过来的基类的方法的时候,该方法对于所有子类都是一样的,可是,对于同一种方法,它存在于每一个子类,但又有所不同,该怎么办,这时候就利用到了覆盖
覆盖方法:在子类内再声明,再重新写实现方式(也就是cv大法再改改就ok了)
#include <iostream>
#include<string>

class Computer
{
public: 
        void print_num();
};

class Ipad: public Computer
{
public:
        void print_num();
};

void Computer::print_num()
{
        std::cout << "1" << std::endl;
}

void Ipad::print_num()
{
        std::cout << "2" << std::endl;
}

int main()
{
        Ipad myipad;
        myipad.print_num();
        
        return 0;
 } 
最后输出的结果是 2 ,而不是1,覆盖使得子类方法的实现方式不同于基类,从而使得不同子类在同一类方法内有不同的实现方式;
重载

重载就是对同名方法,但有对有不同的传入参数有不同的实现方式;
重载方法:在同名方法下再定义一个有参数的,再写实现(cv大法再加点参数再改改实现)
#include <iostream>
#include<string>

class Computer
{
public: 
    void print_num();
    void print_num(int num);
};

class Ipad: public Computer
{
public:
};

void Computer::print_num()
{
    std::cout << "1" << std::endl;
}
void Computer::print_num(int num)
{
        std::cout << num << std::endl;
}

int main()
{
        Ipad myipad;
    myipad.print_num();
    myipad.print_num(15);
        
    return 0;
 } 
1
15
相信你很容易理解

混合的错误
#include <iostream>
#include<string>

class Computer
{
public: 
        void print_num();
        void print_num(int num);
};

class Ipad: public Computer
{
public:
        void print_num();
        
};

void Computer::print_num()
{
        std::cout << "1" << std::endl;
}
void Computer::print_num(int num)
{
        std::cout << num << std::endl;
}

void Ipad::print_num()
{
        std::cout << "2" << std::endl;
}

int main()
{
        Ipad myipad;
        myipad.print_num();
        myipad.print_num(15);
        
    return 0;
 } 
编译后会报错,因为使用了覆盖之后,就无法使用到基类的重载方法,解决方法:在子类再声明,然后再次写实现。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 18:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表