小编nah*_*hpr的帖子

C++:如何从外部调用父类函数

我有:

class A{
    public:
        virtual void foo();
};

class B : public A{
    public:
        void foo();
};

B *ptr = new B();
Run Code Online (Sandbox Code Playgroud)

我想foo()使用'ptr'指针直接调用A.

当我尝试

(A*)ptr->foo();
Run Code Online (Sandbox Code Playgroud)

它仍然称为B的版本foo().我如何调用A的版本?

这可能吗?有哪些替代方案?谢谢.

c++ virtual inheritance pointers

9
推荐指数
1
解决办法
2517
查看次数

c ++具有相同变量名的多个父项

class A{
    protected:
    int var;
};

class B{
    protected:
    int var;
};

class C : public A, public B {};
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?变量合并吗?我可以调用一个特定的,比如B :: var = 2等.

c++ inheritance multiple-inheritance

9
推荐指数
1
解决办法
3372
查看次数

依赖注入/继承设计模式的构造函数参数太多

所以我决定使用工厂设计模式和依赖注入.

class ClassA
{        
    Object *a, *b, *c;
    public:
    ClassA(Object *a, Object *b, Object *c) :
    a(a), b(b), c(c) {}
};

class ClassB : public ClassA
{        
    Object *d, *e, *f;
    public:
    ClassB(Object *a, Object *b, Object *c, Object *d, Object *e, Object *f) :
    ClassA(a, b, c), d(d), e(e), f(f) {}
};
Run Code Online (Sandbox Code Playgroud)

现在,问题是classB有太多的构造函数参数.这是一个单继承层示例,但是当继承层开始变深时,并且当每个层类需要构造更多对象时,顶层中的构造函数结束时需要太多参数才能生成!

我知道我可以使用setter而不是构造函数,但还有其他方法吗?

c++ inheritance design-patterns dependency-injection

6
推荐指数
2
解决办法
1567
查看次数

C++重载赋值运算符:"无法将`B*`转换为'A*`"错误

class B;

class A{

    B *b;
    public:
    void operator= (B *b){
        this->b = b;
    }
}; 

B *b = new B()
A *a = new A();
a = b;
Run Code Online (Sandbox Code Playgroud)

我收到"无法转换B*A*"错误.有没有解决的办法?

现在,如果有办法,如果我使用类似的东西:

a = NULL;
Run Code Online (Sandbox Code Playgroud)

将使用哪个运算符"="?

c++ operator-overloading assignment-operator

4
推荐指数
2
解决办法
684
查看次数