gpt4 book ai didi

c++ - 演示static_cast的目的和用途呢?

转载 作者:行者123 更新时间:2023-11-28 05:29:41 24 4
gpt4 key购买 nike

我试图理解 static_cast 关于向上转型( child 到 parent )的问题。这对我来说没有意义。我必须将 child 交给 parent 并进行演示。在网上查看一些代码和引用书籍后,这就是我所拥有的。

Mustang *myMustang = new Mustang;
Car *myCar = new Car;

myMustang = static_cast<Mustang*>(myCar);

但坦率地说,它没有显示任何内容。我无法验证它是否已转换。我试图向 Car 类添加一个公共(public)函数并从子类中调用它,但是......它显然是继承的。

这也意味着我目前看不到这种向上转换的目的。

我的问题是,我如何验证这个偶数转换以及这种类型转换的目的是什么?

更新:由于我没有这种类型的转换经验,而且虚函数是一个模糊的内存,所以答案有点难以理解。我的 friend 能够帮助我。以下是代码,以防其他人遇到同样的问题。

class Car {
public:
virtual void Greeting() { cout << "I am a car." << endl; };
};

class Focus : public Car{
public:
void FocusGreeting() { cout << "Hello, I am a Ford Focus." << endl; }
};

class Mustang : public Car {
public:
virtual void Greeting() override { cout << "I am a Ford Mustang." << endl; }
};

// in main
Mustang* myMustang = new Mustang;
Car *myCar = new Car;

myCar->Greeting();
cout << "Now ";
myCar = static_cast<Car*>(myMustang);

myCar->Greeting();

最佳答案

在 CRTP 模式中的使用示例:

#include <type_traits>
//
// the general concept of being able to accelerate
template<class T>
struct acceleratable
{
auto accelerate() {
static_assert(std::is_base_of<acceleratable<T>, T>::value, "");
// turn this in to a T, since we know that *this really is a T
return static_cast<T*>(this)->do_accelerate();
}
};

//
// something that implementes the concept of being able to accelerate
struct car : acceleratable<car>
{
private:
friend acceleratable<car>;
void do_accelerate()
{
// accelerate implementation here
}
};

//
// free function which accelerates anything that's acceleratable
template<class Thing>
auto accelerate(Thing& t)
{
t.accelerate();
}

int main()
{
car c;
accelerate(c);
}

关于c++ - 演示static_cast的目的和用途呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39814429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com