我可以调用从 main() 覆盖的虚函数吗?

cra*_*ick 2 c++ polymorphism virtual-functions

我知道这个


// C++ program for function overriding 

#include <bits/stdc++.h> 
using namespace std; 

class base 
{ 
public: 
    virtual void print () 
    { cout<< "print base class" <<endl; } 

    void show () 
    { cout<< "show base class" <<endl; } 
}; 

class derived:public base 
{ 
public: 
    void print () //print () is already virtual function in derived class, we could also declared as virtual void print () explicitly 
    { cout<< "print derived class" <<endl; } 

    void show () 
    { cout<< "show derived class" <<endl; } 
}; 

//main function 
int main()  
{ 
    base *bptr; 
    derived d; 
    bptr = &d; 

    //virtual function, binded at runtime (Runtime polymorphism) 
    bptr->print();  

    // Non-virtual function, binded at compile time 
    bptr->show();  

    return 0; 
} 
Run Code Online (Sandbox Code Playgroud)

我可以打印


// C++ program for function overriding 

#include <bits/stdc++.h> 
using namespace std; 

class base 
{ 
public: 
    virtual void print () 
    { cout<< "print base class" <<endl; } 

    void show () 
    { cout<< "show base class" <<endl; } 
}; 

class derived:public base 
{ 
public: 
    void print () //print () is already virtual function in derived class, we could also declared as virtual void print () explicitly 
    { cout<< "print derived class" <<endl; } 

    void show () 
    { cout<< "show derived class" <<endl; } 
}; 

//main function 
int main()  
{ 
    base *bptr; 
    derived d; 
    bptr = &d; 

    //virtual function, binded at runtime (Runtime polymorphism) 
    bptr->print();  

    // Non-virtual function, binded at compile time 
    bptr->show();  

    return 0; 
} 
Run Code Online (Sandbox Code Playgroud)

我可以打印吗

print derived class
show base class
show derived class
Run Code Online (Sandbox Code Playgroud)

d派生类的对象只需更改main()而不创建另一个对象?如果是,如何?

R S*_*ahu 11

我可以用d派生类的对象打印打印基类,只需更改main()

是的你可以。您必须在调用中显式使用基类。

bptr->base::print();  
Run Code Online (Sandbox Code Playgroud)

也可以d直接使用。

d.base::print();  
Run Code Online (Sandbox Code Playgroud)