C++ 虚方法的作用和介绍

我们在多态公有继承时,我们常常用到虚方法,在成员函数前面加virtual的函数,被称为虚函数。我们在派生类种定义基类的方法,当我们派生类对象也想用这个方法名称。这个时候,如果用虚函数,程序将对对象类型而不是引用或指针的类型来选择方法版本。

class Brass
{
private:
    std::string fullName;
    long acctNum;
    double balance;
public:
    Brass(const std::string & s = "Nullbody", long an = -1,
                double bal = 0.0);
    void Deposit(double amt);
    virtual void Withdraw(double amt);
    double Balance() const;
    virtual void ViewAcct() const;
    virtual ~Brass() {}
};

//Brass Plus Account Class
class BrassPlus : public Brass
{
private:
    double maxLoan;
    double rate;
    double owesBank;
public:
    BrassPlus(const std::string & s = "Nullbody", long an = -1,
            double bal = 0.0, double ml = 500,
            double r = 0.11125);
    BrassPlus(const Brass & ba, double ml = 500, 
		                        double r = 0.11125);
    BrassPlus(const Brass & ba, double ml = 500, 
		                        double r = 0.11125);
    virtual void ViewAcct()const;
    virtual void Withdraw(double amt);
    void ResetMax(double m) { maxLoan = m; }
    void ResetRate(double r) { rate = r; };
    void ResetOwes() { owesBank = 0; }
};
		                     
		         

其中的withdraw和ViewAcct都是虚函数,包括析构函数。当我们用Brass定义一个对象dom,用派生类对象定义一个对象dot

Brass dom("Dominc Banker",11224,413);
BrassPlus dot("Dominc Tanker",11211,429);
Brass &b1_ref=dom;
Brass &b2_ref=dot;
b1_ref.ViewAcct();//这里用的基类的ViewAcct
b2_ref.ViewAcct();//这里用的派生类的ViewAcct

如果不加virtual,那么b2_ref.ViewAcct()用的还是基类的方法,因为程序是根据引用类型和指针类型选择方法。
虚函数满足多态的问题,就是我们要同时管理基类和派生类对象,我们定义一个指向基类的指针数组,但是这些指针在赋值的时候,包含指向基类对象的指针和指向派生类对象的指针。这样达到多态管理的目的。
构造函数不能是虚函数,析构函数应该是虚函数,友元函数不能是虚函数。

发布了9 篇原创文章 · 获赞 0 · 访问量 253

猜你喜欢

转载自blog.csdn.net/a_465240/article/details/104817515