一叶枫残 发表于 2021-2-18 20:09:51

C++(14th for three):覆盖与重载

覆盖
我们知道,当子类采用继承过来的基类的方法的时候,该方法对于所有子类都是一样的,可是,对于同一种方法,它存在于每一个子类,但又有所不同,该怎么办,这时候就利用到了覆盖
覆盖方法:在子类内再声明,再重新写实现方式(也就是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;
}
编译后会报错,因为使用了覆盖之后,就无法使用到基类的重载方法,解决方法:在子类再声明,然后再次写实现。
页: [1]
查看完整版本: C++(14th for three):覆盖与重载