我正在使用一个指向对象的向量.这些对象派生自基类,并且正在动态分配和存储.
例如,我有类似的东西:
vector<Enemy*> Enemies;
Run Code Online (Sandbox Code Playgroud)
我将从Enemy类派生,然后为派生类动态分配内存,如下所示:
enemies.push_back(new Monster());
Run Code Online (Sandbox Code Playgroud)
为了避免内存泄漏和其他问题,我需要注意哪些事项?
假设我有公共方法A和B的BaseClass,我通过继承创建DerivedClass.
例如
public DerivedClass : BaseClass {}
Run Code Online (Sandbox Code Playgroud)
现在我想在DerivedClass中开发一个使用A和B的方法C.有没有办法可以在DerivedClass中将方法A和B重写为私有,这样只有方法C才会暴露给想要使用我的DerivedClass的人?
我很确定我理解上传和下传之间的一般区别,特别是在C++中.我知道我们不能总是向下转换因为将基类指针强制转换为派生类指针会假定所指向的基类对象具有派生类的所有成员.
在学期的早些时候,我的教授告诉全班同学,在C++中升级有时也是非法的,但我似乎错过了我的笔记中的原因,我不记得这是什么时候发生的.
什么时候在C++中升级是非法的?
我有四节课.Request,DerivedRequest,Handler,DerivedHandler.Handler类具有以下声明的属性:
public abstract Request request { get; set; }
Run Code Online (Sandbox Code Playgroud)
DerivedHandler需要覆盖此属性,以便它返回DerivedRequest:
public override DerivedRequest request { get; set; }
Run Code Online (Sandbox Code Playgroud)
有没有人对如何使这项工作有任何想法?
鉴于此基类:
class Employee
{
char* name;
int age;
public:
Employee(char* name);
void print();
};
Run Code Online (Sandbox Code Playgroud)
关于"公众",这有什么区别:
class Manager : public Employee
{
EmployeeList employees;
public:
Manager(char* name, Employee* people);
void print();
};
Run Code Online (Sandbox Code Playgroud)
还有这个:
class Manager : Employee
{
EmployeeList employees;
public:
Manager(char* name, Employee* people);
void print();
};
Run Code Online (Sandbox Code Playgroud) 似乎没有好的在线文档:如果我创建一个派生类,它会自动拥有基类的所有属性吗?但是有什么用呢BaseClass.__init(),你还需要对其他基类方法做吗?是否BaseClass.__init__()需要论证?如果您有基类的参数__init__(),它们是否也被派生类使用,您是否需要显式设置派生classe的参数__init__(),或者将它们设置为BaseClass.__init__()?
这是我的代码 -
#include<iostream>
using namespace std;
class base
{
public:
void sid()
{
}
};
class derived : private base
{
public:
void sid()
{
}
};
int main()
{
base * ptr;
ptr = new derived; // error: 'base' is an inaccessible base of 'derived'
ptr->sid();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这给出了编译时错误.
error: 'base' is an inaccessible base of 'derived'
Run Code Online (Sandbox Code Playgroud)
由于编译器将尝试调用基类,sid()为什么我会收到此错误?有人可以解释一下.
我有一个程序,我需要在dll和一些应用程序代码之间共享一个基类.然后我有两个不同的派生类,一个在主应用程序的dll中.其中每个都有一些静态成员函数,它们对nase类中的数据进行操作.(它们需要是静态的,因为在其他地方用作函数指针).最简单的形式我的问题如下所示.
class Base {
protected:
int var ;
};
class Derived : public Base {
static bool Process( Base *pBase ) {
pBase->var = 2;
return true;
}
};
Run Code Online (Sandbox Code Playgroud)
我的编译器抱怨我无法访问pBase的受保护成员,即使Derived已经保护对Base的访问权限.有什么方法可以解决这个问题,还是我误解了什么?我可以将Base变量公开,但这会很糟糕,因为在我的实例中,这些是分配的内存块和信号量来保护它以进行多线程处理.
救命?
Hi I am trying to serialize an array of objects which are derived from a class and I keep hitting the same error using c#. Any help is much appreciated.
obviously this example has been scaled down for the purpose of this post in the real world Shape would contain a plethora of different shapes.
Program.cs
namespace XMLInheritTests
{
class Program
{
static void Main(string[] args)
{
Shape[] a = new Shape[1] { new Square(1) };
FileStream fS = new …Run Code Online (Sandbox Code Playgroud) 我对派生类中重新定义和重写函数之间的差异感到困惑.
我知道 - 在C++中,重新定义的函数是静态绑定的,被覆盖的函数是动态绑定的,并且重写了虚函数,并重新定义了非虚函数.
当派生类"重新定义"基类中的方法时,会考虑重新定义.但是当派生类是虚拟的时,它不再重新定义而是覆盖.所以我理解规则的后勤,但我不明白底线.
在下面的示例中,重新定义了SetScore函数.但是,如果我在基类虚拟中设置setScore函数(通过向其添加单词virtual),将覆盖派生类中的setScore.我不明白底线 - 有什么区别.在setScore?
基类:
class GradedActivity
{
protected:
char letter; // To hold the letter grade
double score; // To hold the numeric score
void determineGrade(); // Determines the letter grade
public:
// Default constructor
GradedActivity()
{ letter = ' '; score = 0.0; }
// Mutator function
void setScore(double s)
{ score = s;
determineGrade();}
// Accessor functions
double getScore() const
{ return score; }
char getLetterGrade() const
{ return letter; }
};
Run Code Online (Sandbox Code Playgroud)
派生类: …
derived ×10
c++ ×6
class ×5
base ×3
c# ×3
inheritance ×3
abstract ×1
accessible ×1
attributes ×1
downcast ×1
overriding ×1
pointers ×1
private ×1
public ×1
python ×1
static ×1
stl ×1
vector ×1
xml ×1