网站建设设计费会计分录,从事网页设计工资高吗,wordpress 外链搜索框,在家有电脑怎么做网站重写#xff08;Override#xff09;和重载#xff08;Overload#xff09;是面向对象编程中常用的两个概念#xff0c;它们虽然都涉及到方法的定义#xff0c;但是在实现和使用上有着不同的特点。
重写#xff08;Override#xff09;#xff1a; 重写是指在子类中重…重写Override和重载Overload是面向对象编程中常用的两个概念它们虽然都涉及到方法的定义但是在实现和使用上有着不同的特点。
重写Override 重写是指在子类中重新定义覆盖了父类中的某个方法方法名、参数列表和返回类型必须完全一致。重写的目的是为了在子类中修改或者扩展父类方法的行为使得子类能够根据自身的特点来实现特定的功能当子类对象调用被重写的方法时将执行子类中的方法而不是父类中的方法。 示例
//父类
class Animal
{
public:Animal(){};~Animal(){};//动物吃行为void eat(){std::cout Eat 函数 std::endl;}
};
//子类
class Cat : public Animal
{
public:Cat(){};~Cat(){};//子类中重写eat方法void eat() {std::cout Cat Eat 函数 std::endl;}
};
在Cat类中定义了一个与父类中eat()函数同名的函数这是方法的重写。这意味着当在Cat类的对象上调用eat()函数时将会执行Cat类中的eat()函数而不是父类中的eat()函数。
那么此时再程序中创建Cat对象并调用其eat函数
int main() {Cat * catObjA new Cat;catObjA-eat();delete catObjA;
system(pause);return 0;
}
结果为 如果这个时候还想使用子类对象调用其父类的成员方法时就需要使用::符号进行调用
int main() {Cat * catObjA new Cat;//子类中的eat方法catObjA-eat();//调用父类中的eat方法catObjA-Animal::eat();delete catObjA;
system(pause);return 0;
}
此时就能够正常调用父类中的成员方法: 重载Overload 重载是指在同一个类中定义多个方法它们具有相同的名称但是参数列表不同参数类型、参数个数或参数顺序不同的特点重载的目的是为了让方法在功能上相似但参数不同的情况下能够使用相同的名称从而提高代码的可读性和易用性。编译器根据方法调用时提供的参数列表来确定调用哪个重载版本的方法。 示例
class Cat
{
public://函数重载void run() {std::cout Cat Run 函数 std::endl;}
void run(int acount) {std::cout acount 个 Cat Run 函数 std::endl;}
void run(int a,int b) {std::cout ab 个 Cat Run 函数 std::endl;}
}
这段代码展示了C中的函数重载Function Overloading的情况;一个简单的类其中包含了三个名为run()的成员函数它们的参数列表不同。 第一个run()函数没有参数当调用它时输出Cat Run 函数。 第二个run()函数接受一个整数参数acount当调用它时输出acount 个 Cat Run 函数。 第三个run()函数接受两个整数参数a和b当调用它时输出a b 个 Cat Run 函数。
这种情况被称为函数重载。函数重载是指在同一个作用域内定义了多个名称相同但参数列表不同的函数。编译器会根据调用时提供的参数类型和数量来决定调用哪个版本的函数。
在主函数中进行Cat对象创建且调用cat对象中重载的run方法
int main() {Cat * catObj new Cat;catObj-run();catObj-run(1);catObj-run(1, 2);delete catObj;system(pause);return 0;
} 编译器自动根据调用时提供的参数类型和数量来决定调用哪个版本的函数。