c++返回值类型协变
时间: 2023-07-04 07:05:34 浏览: 124
C++类型转换
5星 · 资源好评率100%
C++11引入了返回值类型协变(Return Type Covariance)的特性,即派生类中的重写函数的返回类型可以是基类函数返回类型的派生类型。这个特性对于实现多态很有用,可以提高代码的可读性和可维护性。
例如,假设有一个基类Animal,它有一个虚函数getType(),返回类型为std::string。现在我们定义一个派生类Dog,它重写了getType()函数,返回类型为const char*。这是合法的,因为const char*是std::string的派生类型。
```c++
class Animal {
public:
virtual std::string getType() const {
return "Animal";
}
};
class Dog : public Animal {
public:
const char* getType() const override {
return "Dog";
}
};
```
在使用时,我们可以通过基类指针来调用派生类的实现:
```c++
int main() {
Animal* animal = new Dog();
std::cout << animal->getType() << std::endl; // 输出 "Dog"
delete animal;
return 0;
}
```
需要注意的是,返回值类型协变只适用于指针或引用类型的返回值,对于值类型的返回值则不适用。此外,C++11引入了override关键字来显式声明函数重写,可以更加安全地防止重写错误。
阅读全文