假设我有一个带虚函数的空类:
class Base
{
public:
virtual void Foo(){std::cout << "this is the base class";}
}
然后,我有一个从Base继承并重写Foo()的类。
class Derived : public Base
{
public:
void Foo(){std::cout << "this is the derived class";}
}
然后还有一些包含Base列表的其他类
class OtherClass
{
public:
好吧,我一整天都被困在这上面了。我要做的是有一个函数,它接受某个基类的任何导数,然后将它添加到一个向量中。我不能指定所有的衍生产品,因为我不知道他们在高级。
我知道这段代码离我很远,但这是我想要做的最简单的代码,因为我不确定我尝试过的任何其他事情(auto_ptr、强制转换等)是否都在正确的轨道上。总之:
#include <iostream>
#include <vector>
class Base {
public:
void go() {
std::cout << "I am the base class" &
class Base
{
public:
// This version of getThis() returns a pointer to a Base class
virtual Base* getThis() { std::cout << "called Base::getThis()\n"; return this; }
void printType() { std::cout << "returned a Base\n"; }
};
class Derived : public Base
{
publ
我试图将一个对象绑定到一个函数,但是正在调用基类函数。代码--这只是真实代码的一个例子。我将只在后面的实际代码中使用字符串。
class A {
public:
virtual void f(const std::string &s) {
std::cout << "A " << s << std::endl;
}
};
class B : public A {
public:
void f(const std::string
这可能是一件很愚蠢的事情,但我不明白我得到的g++输出。我试图持有指向派生对象的指向虚拟基类的指针。当我运行注释代码时,它工作得很好,而且正如预期的那样,将它保存在unique_ptr中并不会编译。
错误消息:
In file included from /usr/include/c++/4.9/memory:81:0,
from 2:
/usr/include/c++/4.9/bits/unique_ptr.h: In instantiation of 'typename std::_MakeUniq<_Tp>::__single_obj
编辑:谢谢,很棒的帮助,一如既往:)
我找不到解决这个问题的方法,我有一个基类的unique_ptr,它有一个派生类的数据,我想将它的类型设置为派生类,这样我就可以访问派生成员了。请参阅以下代码:
#include <memory>
#include <iostream>
class Base
{
public:
int v1 = 0xAAAAAAAA;
};
class Derived : public Base
{
public:
int v2 = 0xBBBBBBBB;
};
int main()
{
std::unique_ptr
我有一个文件,其中包含名称、颜色和有关它们的一些统计数据的列表。例如:
John black 10 15
Adam black 19 18
Jake brown 13 51 56 62
Rich brown 13 09 98 84
我希望能够根据它们的颜色将这些名称、颜色和数字存储在它们各自的对象中。因此,John和Adam将存储在Black类中,Black和Rich将存储在Brown类中。
既然每个person都是不同的类型,我如何将每个person存储在他们各自的对象中?
class Color{
public:
Color(string FIRST, string CO
建议,向量中的对象切片可以通过使用指针来克服。根据我的测试,在处理基类和派生类之间共享的变量时,这是正确的。例如,给定这些类:
class Base {
public:
int x = 1;
};
class Derived : public Base {
public:
Derived() : Base() {
x = 2;
}
int y;
};
可以看出,导出在构造时将x重新定义为2。当放置到基类的向量中时,x变量的行为与预期相同。
vector<unique_ptr<Base>> baseVec;
我不明白我做错了什么。我收到错误消息:上面这行代码从A*到B*的转换无效:
B *p3=new A(p2->operator+(*p1));
下面是完整的代码。
#include <iostream>
using namespace std;
#include <iostream>
using namespace std;
class A
{
protected: int x;
public: A(int i=-31) {x=i;}
virtual A operator+(A a) {return x+a.x;}
};
class B:p
我试图充分理解如何在C++中确定类大小,以便在设计数据结构时记住这一点。我有一些类是我为测试而创建的,但在某些大小上似乎有些困难,可能是因为不知道将这些大小相加在一起的顺序。
考虑一下64位编译的下列内容
class A {
public:
virtual void work() {}
private:
float a;
float b;
};
class B : A {
private:
float b1;
};
class C : A {
private:
float c1;
};
class D : C {
private:
fl
我正在努力学习C++,并编写了这段代码。根据我的理解,这段代码需要以"Derived Class"的形式生成输出,但是输出是"Base Class"。请帮我理解一下。
#include <iostream>
using namespace std;
class Base {
public:
char* name;
void display() {
cout << name << endl;
}
};
class Derived: public Base {
我被这段代码困住了,当我将派生类的地址存储在基类指针中时,它会显示错误,但是当公开继承时没有错误,有人能帮上忙吗?
#include <iostream>
using namespace std;
class Base // Created a Class Base
{
public:
void show()
{
cout << "base";
}
};
class Derived: private Base
{
public:
int d;
void display()
{
cout << "derived";
}
我在C++中有这两个类
Problema,它是我的超类
class Problema
{
protected:
string tipo;
int N;// GT1 # vertex ; SP5
int M;// GT1 # edges ; SP5
int K;// GT1 covering ; SP5
Problema *Hijo;
public:
//void readProblema(std::ifstream& file); // Lee un problema d
在一个大型的单线程C++应用程序(使用GCC 4.4.7 20120313编译)中,简单的指针赋值不等于原始指针值:
class DvComVectorStreamBase : virtual public std::ios
{
// some stuff here
};
class DvComVectorOStream : public DvComVectorStreamBase, public std::ostream
{
public:
DvComVectorOStream(int which = std::ios::out, size_t capacity = 0)
我的情况类似于,其中有两个类共享一个公共接口函数,因此我将该函数(示例中的manage_data_in_memory())提取到两个类继承的基类中。然而,这两个类在其他方面是不相关的,其中一个是多态的,而另一个不是。也不期望有人声明这个基类的一个对象,因为它的存在只是为了防止代码重复(有什么方法可以强制执行吗?)我知道纯虚拟函数可以阻止对象被实例化,但是声明一个在派生类中不做任何操作的虚拟纯虚拟函数似乎是错误的设计)。
在这种情况下,基类析构函数需要是虚拟的吗?这将迫使另一个派生类也具有一个不需要的虚拟析构函数。谢谢。
所以现在我有了表格中的代码
class base { // don
在windows visual studio编译器上,我有以下代码:
#include <iostream>
#include <string>
class A
{
public:
A() : m_i(0) { }
protected:
int m_i;
};
class B
{
public:
B() : m_d(0.0) { }
protected:
double m_d;
};
class C : public A, public B
{
public:
C() : m_c('a') { }
pr
我在想,这可能是一个重复的问题,但我试着阅读了几乎所有相关的帖子,没有一个是我正在寻找的具体问题。
好的,我知道你不能从基类指针调用派生类中的函数,除非它被标记为虚拟的。就像在参考程序1中一样,如果WhichClass()没有被标记为虚拟,它就不能调用B类的WhichClass()。
#include<iostream>
using namespace std;
class A
{
public:
const char* WhichClass(){return "A";}
};
class B:public A
{
public:
const cha
有关:数组C++中的子类
嗨,伙计们,抱歉,我被困在工作上了。
基本上这就是发生的事
我有一个父类呼叫工具,它接到两个子类呼叫。
Car and Motorcycle
父类具有以下值:
string Name: value either Car or MotorCycle
wheels : 4 or 2 (depends is car or motorcycle)
Notes On Wheel:
wheel[0] : Fine condition
wheel[1] : need some repair
wheel[2] : Fine condition
wheel[3] : Fine cond
C++11将final关键字引入C++。
它可以在虚拟方法上使用或在类上使用。
声明类最终禁止任何类型的继承:公共继承、保护继承和私有继承。
struct A final {
};
class B: private A {
};
error: base 'A' ^ is marked 'final'
虽然禁止公共继承(例如,如果我的类没有虚拟析构函数或其他原因)是合理的,但我为什么要禁止私有继承呢?
如果final禁止只允许公共继承,那么std::string和它在std中的其他朋友就应该是final -,就像-一样,因为没有虚拟析构函数?。
编辑:
Hi