这是未定义的行为吗?
class Derived: public Base //No other bases!!!
{
//...
};
Derived d;
void *pv = &d;
Base *b = static_cast<Base*>(pv);
b->SomeMethod();
在一个合理的实现中,只要有一个继承,Base和Derived指针的比特就会匹配。但语言能保证这一点吗?
编辑:真正的目的是将指向多态C++对象的指针通过C层传递回C++回调。该对象是以派生形式创建的,但在上述回调中作为Base使用。完整的故事是。
我对C++非常陌生,我来自Java/C#。
我知道,在Java和C#中,您可以创建一个类,从它继承另一个类,并重写它的函数。然后,您可以创建父类的列表,并将子类的对象插入到此列表中。之后,您可以使用被重写的它的函数。
示例:
public class Parent
{
public virtual void test()
{
Console.WriteLine("test");
}
}
public class Child : Parent
{
public override void test()
{
Console.WriteLine(
下面是C++中最简单的虚拟函数示例:
#include <iostream>
class A {
public:
virtual void f() {
std::cout << "A";
}
};
class B : public A {
public:
void f() {
std::cout << "B";
}
};
int main() {
{
// calls f() in derived class
A*
在C++中,我正在努力完成一项看似简单的任务。我正在尝试实现基本的OOP多态性。
考虑一下这个Java示例:
interface Bob
{
void foo();
}
class ActualBob implements Bob
{
void foo()
{
/* I like foo things */
}
}
class Jane
{
Bob bob;
}
简可以拥有任何一个鲍勃,很容易:
Jane jane = new Jane();
jane.bob = new ActualBob();
jane.bob.foo(); // actua
我正在尝试用我想要如何执行特定功能的专门化来子类化一个类。但是,当我将我的类存储在列表中时,C++会隐式地将它转换为它的基类。显然,列表可以存储类的任何子类,所以这是可以接受的,但是我如何存储类,以便访问这个特定的函数。
我能想到的唯一方法就是使用模板,还有其他选择吗?
下面是一个示例:
class A
{
A() {}
virtual void function()
{
}
}
class B : public A
{
B() {}
void function()
{
}
}
boost::shared_ptr<B&g
几周前,我做了一个程序员的测试,但没有通过。测试是那些满是“勾你!”c++问题,这与我们在日常编码中所面临的问题毫无关系。我真希望我能把它们全部打印出来,贴在网上,但太迟了。一个我记得,我不知道是否有人能肯定地澄清最好的答案。
下面的代码是否显示了继承或多态性的示例?对我来说,两者都是,但我最终回答了继承,因为它只给了我选择的选择。派生类显然是从基类继承属性,但是由于方法的行为只有变化,所以它也可以是一个多态示例。
有什么评论吗?
class Base
{
public:
Base() {}
~Base() {}
virtual int Foo(int a)
我有一个关于继承和虚方法的基本C++问题。
请注意这段代码:
#include <iostream>
#include <vector>
using namespace std;
class A {
public:
virtual void f() {cout << "A\n";};
};
class B : public A {
public:
void f() {cout << "B\n";};
};
int main() {
A a;
B b;
vector<A> v;