马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
相信你很容易理解
混合的错误 #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;
}
编译后会报错,因为使用了覆盖之后,就无法使用到基类的重载方法,解决方法:在子类再声明,然后再次写实现。 |