如何在C++中创建一个抽象类,其中包含一些我想在子类中重写的抽象方法?.h文件应该是什么样子?是否有一个.cpp,如果是的话,它应该是什么样子的?
在Java中,它看起来如下所示:
abstract class GameObject
{
public abstract void update();
public abstract void paint(Graphics g);
}
class Player extends GameObject
{
@Override
public void update()
{
// ...
有很好的理由使用私有或受保护的所有虚拟函数构造基类接口(请参阅)。但是,如何防止派生类(可能掌握在外部客户端手中)使私有虚拟函数公开呢?在中,作者讨论了这个问题,但没有讨论解决办法。
编辑:从你的答案和我之前的想法来看,似乎没有办法阻止这一点。但是,由于在这种情况下,很容易出错(客户机肯定会触及受保护的虚拟函数),所以编译器警告这种使用是有意义的。我试着用g++测试它。首先,我写道:
class A {
protected:
virtual void none() { return; }
};
class B: public A {
publi
因此,我在C++中遇到了一个叫做虚拟函数的东西,简单地说,根据我所理解的,它是用来在派生/子类中启用函数重载的。
因此,考虑到我们有以下课程:
class MyBase{
public:
virtual void saySomething() { /* some code */ }
};
然后,当我们创建一个继承MyBase的新类时:
class MySubClass : public MyBase{
public:
void saySomething() { /* different code than in MyBase function */ }
};
MySubClas
由于方法静态绑定的C++特性,这会影响多态调用.
维基百科:
虽然这种分派机制所涉及的开销很低,但是对于语言设计的目标应用领域来说,它仍然是很重要的。因此,C++的设计者选择将动态调度设置为可选的和非默认的。只有使用虚拟关键字声明的函数才会根据对象的运行时类型分派;其他函数将根据对象的静态类型分派。
所以密码:
Polygon* p = new Triangle;
p->area();
如果area()是父类(即子类中的overridden )中的一个non-virtual函数,那么上面的代码将调用开发人员可能不期望的Parent's class method。(多亏了我介绍的
我很难理解virtual关键字在C++中的用途。我非常了解C和Java,但我对C++还是新手
从维基百科
在面向对象编程中,虚拟函数或虚拟方法是一个函数或方法,其行为可以被具有相同签名的函数覆盖在继承类中。
但是,我可以在不使用virtual关键字的情况下覆盖如下所示的方法
#include <iostream>
using namespace std;
class A {
public:
int a();
};
int A::a() {
return 1;
}
class B : A {
public:
我在VSTS2008中使用原生C++。一个关于虚拟函数的快速问题。在下面的示例中,如果我在派生类中将Foo声明为"virtual void Foo()“或"void Foo()”,有什么区别吗?对将来从派生类派生的类有什么影响吗?
class Base
{
public:
Base()
{
}
virtual void Foo()
{
cout << "In base" << endl;
}
};
class Derived : public Base
{
public
在C++中模拟最终类时,为什么使用“虚拟”关键字?C++程序,没有任何编译错误来演示可以创建最终类的实例
#include <iostream>
using namespace std;
class Final;
class MakeFinal {
private:
MakeFinal() { cout << "MakeFinal constructor" << endl; }
friend class Final;
};
class Final : virtual MakeFinal {
public:
Fin
考虑以下代码段:
class Window // Base class for C++ virtual function example
{
public:
virtual void Create() // virtual function for C++ virtual function example
{
cout <<"Base class Window"<<endl;
}
};
class CommandButt
不知道在这里我的继承哪里出错了,但在将子类实例存储在baseclass指针中时,我似乎只能访问baseclass的方法:
class Car
{
public:
Car():type("Car") {};
Car(const char* t):type(t) {};
void get_type() const { return this->type; };
private:
std::string type;
};
class Ford : public Car
{
public:
我在Xcode的最新版本中构建了一个C++框架(在编写本文时是9.4.1),我使用的是Objective++代码,也是Xcode内部的。我需要从一个指针类型执行一个dynamic_cast到另一个指针类型。但是,dynamic_cast只在调试版本中工作,而不是在发布版构建中工作。对于目标-C++中dynamic_cast是如何工作的,我是否缺少或理解了什么东西使这个示例失败了?
C++ Framework
TestClass.hpp
class Parent {
public:
// https://stackoverflow.com/a/8470002/3938401
我有一个多线程OS应用程序,它使用C++、Objective和Swift的混合。
当我的应用程序关闭时,我在Xcode调试器窗口中看到如下内容:
libc++abi.dylib: Pure virtual function called!
我知道这个错误通常是由调用C++类构造函数或析构函数中的虚拟函数引起的。
有什么简单的方法可以找到它的位置吗?所谓“轻松”,我的意思是“不分析每个构造函数的每一行调用树和每个具有虚拟函数的类的析构函数”。
我没看到堆栈痕迹。当打印此消息时,调试器不会停止程序。从我的应用程序委托的applicationDidTerminate方法中记录的一条消息在此消息之前。