从返回基类指针的派生类对象调用方法
Calling a method from a derived class object that returns a base class pointer
我对一些 c++ OOP 概念有误解,例如,如果我有一个返回指向同一类对象的指针的 base
类,请说:
class base{
public:
int baseVal;
base* foo(){
return new base;
}
}
以及继承方法 foo()
的 derived
类:
class derived : public base{
public:
int derivedVal;
//some other members
}
我的问题是"当我从derived
对象调用方法foo()
时会发生什么?有没有办法 - 而不是覆盖 - 让它返回一个derived
的对象而不是base
?"例如:
int main(){
derived obj1;
derived * obj2P = obj1.foo();
cout << obj2P->derivedVal << endl;
return 0;
}
我该如何处理这样的事情?
您可以使用模板化基类实现所需的目标。
template<typename derived_t>
class base {
public:
derived_t* foo() {
return new derived_t;
}
};
class derived : public base<derived> {
public:
int derivedVal;
//some other members
};
另请参阅 CRTP 模式。
虽然,返回拥有的原始指针通常是不好的做法,您应该更喜欢返回智能指针,如 unique_ptr
:
template<typename derived_t>
class base {
public:
std::unique_ptr<derived_t> foo() {
return std::make_unique<derived_t>();
}
};
相关文章:
- 对RValue对象调用的LValue ref限定成员函数
- 检查哪个对象调用了另一个对象的对象方法
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 从 Base 引用对象调用派生类的成员
- 为什么为未删除的对象调用析构函数?
- Qt c++不会为所有对象调用move_slot.为什么?
- 使用在堆栈上创建的对象调用虚拟函数
- 使用基类对象调用Dervied Class函数
- C++:允许临时对象调用非常量成员函数的设计理念是什么?
- 从类中的对象调用类中的函数的最佳方法
- 派生对象调用的 Base 方法的模板推导
- 如何使用单个对象调用具有相同名称的两个类函数
- 是否可以从另一个类对象调用一个类函数而不继承第一个类
- 如果类没有任何成员变量,则通过临时对象调用类的成员函数的开销是多少?
- 如何对动态数组中的某些对象调用析构函数
- 如何从列表中存储的对象调用成员函数
- 从线程内的对象调用静态方法
- 从成员对象调用方法
- 当包含它的对象调用其析构函数时,unique_ptr是否未分配
- 从对象调用成员对象,错误:引用非常量值的初始值必须是左值