C++类中非虚函数和虚函数相互调用

本文详细解析了C++中虚函数与非虚函数的调用机制,包括不同类型的函数如何在基类和派生类中相互调用及其运行时的行为表现。通过具体的代码示例说明了这些概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记住下面的原则:

   1) 当一个对象调用一个非虚函数时, 与对象的声明类型绑定的, 并不是与实际的对象的类型绑定的。

   2)在虚函数中调用非虚函数的时候, 调用的非虚函数是与虚函数所在的类是一致的

  3) 在非虚函数中调用虚函数的时候, 调用的虚函数是与对像的实际类一致的。

 4) 非虚函数与虚函数的调用与其存取权限无关。


分为,非虚函数: public, protected, private

            虚函数: public, protected, private

非虚函数调用非虚函数, 虚函数

虚函数调用非虚函数, 虚函数

以及他们在子类中的运行时的行为。

using namespace std;
class BaseTemplate
{
public:

    void step1(void)  // 不可被更改的实现细节
    {
        std::cout << "Base: step1不能更改" << std::endl;
    }
    virtual void step2(void ) // 可以被派生类修改的实现细节
    {
         std::cout << "Base: step2可以更改" << std::endl;
    }

protected:
    virtual void step3(void ) =0; // 必须被派生类修改的实现细节     

public:
    void work(void) // 骨架函数,实现了骨架
    {
       step1() ;
       step2() ;
       step3() ;     
    }
};
class Dervie:public BaseTemplate
{
public:
    void step1(void)  // 不可被更改的实现细节
    {
        std::cout << "Derive: step1不能更改" << std::endl;
    }
    void step2(void ) // 可以被派生类修改的实现细节
    {
         std::cout << "Derive: step2可以更改" << std::endl;
    }
    
protected:
    void step3(void)
    {
        std::cout << "Derive: step3" << std::endl;

    }
};
int main(int argc, char* argv[])
{
    BaseTemplate* a = new Dervie;
    a->work();
    
    Dervie* b = new Dervie;
    b->work();
    system("pause");
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值