小编Yam*_*mar的帖子

虚拟功能的重载

我在接受采访时被问到这个问题.我无法在那里回答这个问题.我现在也无法得到它,为什么输出是这样的.这是代码:

#include <iostream>
using namespace std;

class Base
{
public:
    virtual void fun ( int x = 0)
    {
        cout << "Base::fun(), x = " << x << endl;
    }
};

class Derived : public Base
{
public:
    virtual void fun ( float x = 10.0 )
    {
        cout << "Derived::fun(), x = " << x << endl;
    }
};


int main()
{
    Derived d1;
    Base *bp = &d1;
    bp->fun();
    d1.fun();
    d1.fun(1.2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面代码的输出是:

Base::fun(), x = 0 …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance overriding overloading

8
推荐指数
1
解决办法
5106
查看次数

即使在显式调用析构函数后也会自动销毁对象

以下程序:

#include <iostream>
using namespace std;

class Test
{
public:
    Test() { cout << "Constructor is executed\n"; }
    ~Test() { cout << "Destructor is executed\n"; }
};

int main()
{
    Test(); // Explicit call to constructor
    Test t; // local object
    t.~Test(); // Explicit call to destructor
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

打印以下输出:

Constructor is executed
Destructor is executed
Constructor is executed
Destructor is executed
Destructor is executed
Run Code Online (Sandbox Code Playgroud)

我的问题是即使在 main() 中显式调用析构函数之后,为什么编译器在退出 main() 之前隐式调用析构函数?

作为一个附带问题,除了在删除运算符中使用之外,是否还有其他使用显式调用析构函数的策略?

c++ oop

2
推荐指数
1
解决办法
604
查看次数

标签 统计

c++ ×2

inheritance ×1

oop ×1

overloading ×1

overriding ×1