我的观点是,按照OOP的设计,虚拟化在超类构造函数中不起作用。例如,考虑以下C#代码。
using System;
namespace Problem
{
public class BaseClass
{
public BaseClass()
{
Console.WriteLine("Hello, World!");
this.PrintRandom();
}
public virtual void PrintRandom()
{
我是一个c++ n00b,我不确定我是否找对了地方,但我对此感到困惑:
include <iostream>
using namespace std;
class Enemy
{
public:
void sayHere()
{
cout<<"Here"<<endl;
}
virtual void attack()
{
}
};
class Monster: public Enemy
{
public
我有一个任务:
使用::修复错误调用,删除无法修复的构造
int x = 4;
class A{
int x;
public:
A(int n = 1);
virtual int f(int a=0, int b=0);
};
class B{
int x;
public:
B(int n = 2);
int f(int a = 0);
};
class C: public A, public B{
int x;
public:
C(int n=3);
int f(int a, int b=0);
int
在一些书中,声明或继承虚函数的类被称为多态类。
类B没有任何虚函数,但通过了多个is-a测试。
类C有一个虚函数,但没有继承。
class A {};
class B : public A {};
class C
{
public:
virtual void f () {}
};
B类或C类是多态的吗?
我想使用C++11 override说明符,并注意到它可以与virtual一起使用。这有什么不同吗?考虑以下类:
class Base
{
virtual void fct() = 0;
};
class Derived1 : public Base
{
void fct() override {}
};
class Derived2 : public Base
{
virtual void fct() override {}
};
Derived1和Derived2在技术上有区别吗?
我在C++中使用虚函数有一个小问题
我有一个B类,它扩展了A类。
Class A{
virtual function 1 // does nothing
virtual function 2 // does nothing
}
class B : public class A {
function 1 { does some thing }
function 2 { does some thing }
}
我有另一个类实现
class implement {
B b;
A *a = &B;
a.function 1();
a.function 2(
如果我从A派生B,从B派生C,如下所示:
A
|
B
|
C
我很可能在A中有一个或多个虚函数。现在,我意外地忘记了在B的函数声明中放入关键字virtual。但令我惊讶的是,它的工作原理就像在B中也设置了virtual一样:
#include <iostream>
using std::cout;
using std::endl;
class A
{
public:
virtual void foo(){cout << "A\n";};
};
class B : public A
{
public:
void foo(){cout
我已经开始学习C++了,我已经知道C和Java了。我已经开始学习它,因为我想开始使用面向对象编程。
然而,我被代码卡住了,因为编译器生成了“对Actor的vtable的未定义的引用”。在这里,你有生成相同错误的代码,而不是原始的错误,因为它不太清楚。我真的不知道是什么原因造成的。
struct Actor
{
int x, y;
virtual void move();
};
struct Player : Actor
{
Player(int a, int b)
{
x = a;
y = b;
}
第一次发帖,所以请温文点!
我有一个像这样的界面
public interface I_Hospital{
public void registerObserver(I_Person p);
public void removeObserver(I_Person p);
public void notifyObservers();
public void addWard(Ward ward);
}
现在,如果我想在C++中重新创建它,执行以下操作是否正确:
IHospital.h
Class IHospital{
public:
virtual
首先,下面的代码不是工作在visual c++上,而是工作在有出血的地方
输出为0,但acc。对我来说应该是1;有人能解释这个吗?
#include<iostream>
using namespace std;
class shape
{
public:
virtual void print() const =0;
virtual double area() { return 0.0;}
};
class point : public shape
{
int x;
int y;
public :
point(int a=11, int b=1
class a //my base class
{
public:
a()
{
foo();
}
virtual void foo() = 0;
};
class b : public a
{
public:
void foo()
{
}
};
int main()
{
b obj; //ERROR: undefined reference to a::foo()
}
为什么它会给我错误?定义了纯虚拟foo。我需要在代码中进行哪些更改才能使其正常工作?我需要在它的构造函数中调用来自基类的纯虚方法。
我想知道是否有可能在不知道对象的初始类型的情况下,将一个对象强制转换为它继承的多个类。例如,假设我有以下结构:
struct A {
int a;
};
struct B {
int b;
};
struct C {
int c;
};
struct D {
int d;
};
struct Z : A, B, C, D {};
我把Z的实例加到一个向量上。
vector<A *> v;
Z *zed = new Z();
v.push_back(zed);
现在假设我知道向量中的第一个元素继承自A和B,我想将其强制转换为A和B。
struc
我在Stroustrup C++第4版642页上测试了一个dynamic_cast<>示例,但它不能编译。我直接从书中使用下面的图片,试图了解它是如何工作的。有没有人知道这是Eratta (不在他发布的勘误表文档中),还是我读错了什么? Stroustrup图形,虚线表示受保护: ? #include <iostream>
using namespace std;
// H = Ival_box
class H {
};
// G = Ival_slider
class G : public H {
};
// I = BBwindow
class I {
假设我没有使用多重继承或虚拟继承,C++标准是否保证如果我将Derived*转换为Base*,两个指针将具有完全相同的值?例如,即使Derived和/或Base具有虚函数,以下代码是否始终调用success()?
Derived* d = new Derived;
Base* b = d;
if (((void*)b) == ((void*)d))
success();
else
failure();
只是想知道,什么会是最快的?如果我有一个像这样的基类
Class Base
{
virtual void Draw()
{
//something...
}
};
然后我会有一个Base数组,如下所示:
Base Array[255];
它可以同时包含Base和它的衍生物。例如,这将是存储各种绘图命令的一种方式。(我知道这看起来很像java,但这只是示例。只有一个函数的类没有多大意义。)
现在或者,如果我确切知道我会做什么导数,它可以这样做
class Base
{
int ID;
};
然后是一个和以前一样的基数组:基数组Array255;
然后在导数中创建绘图函数:
class Der1