相关疑难解决方法(0)

如果我要覆盖它,我可以调用基类的虚函数吗?

假设我有课程FooBar设置如下:

class Foo
{
public:
    int x;

    virtual void printStuff()
    {
        std::cout << x << std::endl;
    }
};

class Bar : public Foo
{
public:
    int y;

    void printStuff()
    {
        // I would like to call Foo.printStuff() here...
        std::cout << y << std::endl;
    }
};
Run Code Online (Sandbox Code Playgroud)

正如在代码中注释的那样,我希望能够调用我所覆盖的基类函数.在Java中有super.funcname()语法.这在C++中是否可行?

c++ overriding virtual-functions

315
推荐指数
5
解决办法
22万
查看次数

从基类构造函数调用派生类的虚函数?

我正在尝试完成上一个问题中描述的相同内容:

从基类调用虚函数

但是,我真正的问题是:

如果f()是Base类中的构造函数怎么办?将调用哪个g()?我不知道我做错了,但在我的计划中,似乎是相反的.

从前一个问题中获取相同的变量,显示这样的代码

行为看起来像这样:

Class Base

{   

    Base(){g();};

    virtual void g(){//Do some Base related code;}

};



Class Derived : public Base

{   

    Derived(){};

    virtual void g(){//Do some Derived related code};

};



int main()

{

    Derived newDerived;

    return 0;  

}
Run Code Online (Sandbox Code Playgroud)

更新:

Thanx到Naveen.

他向我提供了一个页面,其中包含有关此主题的所有相关信息.

我会告诉你这里的链接:

parashift.com/c++-faq-lite/strange-inheritance.html#faq-23.6

c++

15
推荐指数
1
解决办法
1万
查看次数

如何验证对象的内部状态?

我很想听听您在操作过程中使用什么技术来验证对象的内部状态,从它自己的角度来看,只能因为内部状态不良或不变违规而失败.

我主要关注的是C++,因为在C#中官方和流行的方式是抛出一个异常,并在C++中有不只是一个单一的方式做到这一点(OK,不是真的在C#或者,我知道).

请注意,我不是在讨论函数参数验证,而是更像是类不变完整性检查.

例如,假设我们想要一个异步打印作业的Printer对象Queue.对于用户来说Printer,该操作只能成功,因为异步队列的结果会在另一时间到达.因此,没有相关的错误代码传达给调用者.

但是对于该Printer对象,如果内部状态不好,则该操作可能会失败,即类不变被破坏,这基本上意味着:一个错误.该条件不一定是Printer对象的用户感兴趣的.

就个人而言,我倾向于混合三种内部状态验证方式,我无法确定哪一个是最好的,如果有的话,哪一个绝对是最差的.我想听听你对这些问题的看法,以及你在这个问题上分享你自己的经验和想法.

我使用的第一种风格 - 以可控制的方式比损坏的数据更好地失败:

void Printer::Queue(const PrintJob& job)
{
    // Validate the state in both release and debug builds.
    // Never proceed with the queuing in a bad state.
    if(!IsValidState())
    {
        throw InvalidOperationException();
    }

    // Continue with queuing, parameter checking, etc.
    // Internal state is guaranteed to be good.
}
Run Code Online (Sandbox Code Playgroud)

我使用的第二种风格 - 比腐败数据更难以控制崩溃:

void Printer::Queue(const PrintJob& job)
{
    // Validate the …
Run Code Online (Sandbox Code Playgroud)

c# c++ validation invariants

7
推荐指数
2
解决办法
2279
查看次数

标签 统计

c++ ×3

c# ×1

invariants ×1

overriding ×1

validation ×1

virtual-functions ×1