相关疑难解决方法(0)

为什么没有指针/引用时多态性不起作用?

我确实在SO上发现了一些类似标题的问题 - 但是当我读到答案时,他们关注的是问题的不同部分,这些部分是非常具体的(例如STL /容器).

有人可以告诉我为什么你必须使用指针/引用来实现多态?我可以理解指针可能会有所帮助 - 但肯定只能引用区分传值和传递参考?

当然,只要你在堆上分配内存 - 这样你就可以拥有动态绑定,那么这就足够了 - 显然不是.

c++ polymorphism virtual pointers

55
推荐指数
3
解决办法
2万
查看次数

为什么虚函数需要用指针传递而不是(对象的)值传递?

我想我理解虚方法和vtable的概念,但是我不明白为什么将对象作为指针(或引用)传递并通过值传递它(将哪种方式丢弃vtable或其他东西)之间存在差异?

为什么会这样的工作:

Material* m = new Texture;
poly->setMaterial(m); 
// methods from Texture are called if I keep carrying the pointer around
Run Code Online (Sandbox Code Playgroud)

而不是这个?:

Material m = Texture();
poly->setMaterial(m);
// methods from Material are called if I pass the value around
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism inheritance virtual-functions object-slicing

7
推荐指数
1
解决办法
6015
查看次数

为什么我不能用普通变量做多态?

我是一名Java程序员,最近开始学习C++.我很困惑.

我理解在C++中,要实现多态行为,必须使用指针或引用.例如,考虑Shape具有已实现方法的类getArea().它有几个子类,每个子类都以不同方式覆盖getArea().比考虑以下功能:

void printArea(Shape* shape){
    cout << shape->getArea();
}
Run Code Online (Sandbox Code Playgroud)

该函数getArea()根据Shape指针指向的具体内容调用正确的实现.

这也是一样的:

void printArea(Shape& shape){
    cout << shape.getArea();
}
Run Code Online (Sandbox Code Playgroud)

但是,以下方法不适用于多态:

void printArea(Shape shape){
    cout << shape.getArea();
}
Run Code Online (Sandbox Code Playgroud)

无论Shape函数中传递的是哪种具体类型,getArea()都会调用相同的实现:默认值为Shape.

我想了解这背后的技术推理.为什么多态性适用于指针和引用,而不适用于普通变量?(我认为这不仅适用于功能参数,也适用于任何事情).

请解释一下这种行为的技术原因,帮助我理解.

c++ variables polymorphism pointers reference

5
推荐指数
1
解决办法
173
查看次数