定义一个哺乳动物Mammal类,再由此派生出狗Dog类,二者都定义 Speak()成员函数,基类中定义为虚函数,定义一个Dog类的对象,调用Speak函数,观察运行结果
2017-07-28 16:26
3227 查看
class Mammal
{
public:
Mammal(){cout<<"Mammal"<<endl;}
virtual void speak(){}
virtual ~Mammal()
{
cout<<"~Mammal::speak()"<<endl;
}
};
class Dog:public Mammal
{
public:
Dog(){cout<<"Dog"<<endl;}
virtual void speak()
{
cout<<"Dog::speak"<<endl;
}
~Dog()
{
cout<<"~Dog::speak()"<<endl;
}
};
void main()
{
Mammal *p;
p=new Dog;
p->speak();
//(*p).speak();
delete p;
p=NULL;
}
运行结果:
如若基类的析构函数不写关键字virtual,则只会调用基类的析构函数,不会调用派生类的析构函数
{
public:
Mammal(){cout<<"Mammal"<<endl;}
virtual void speak(){}
virtual ~Mammal()
{
cout<<"~Mammal::speak()"<<endl;
}
};
class Dog:public Mammal
{
public:
Dog(){cout<<"Dog"<<endl;}
virtual void speak()
{
cout<<"Dog::speak"<<endl;
}
~Dog()
{
cout<<"~Dog::speak()"<<endl;
}
};
void main()
{
Mammal *p;
p=new Dog;
p->speak();
//(*p).speak();
delete p;
p=NULL;
}
运行结果:
如若基类的析构函数不写关键字virtual,则只会调用基类的析构函数,不会调用派生类的析构函数
相关文章推荐
- 声明一个哺乳动物类Mammal,再由此派生出狗类Dog,二者都定义Speak()成员函数,基类中定义为虚函数,声明类Dog的一个对象,调用函数Speak()
- 定义一个包含私有成员变量和函数的类,再定义一个内部类,在内部类函数中访问外部成员变量,并调用外部函数。在外部类函数中创建内部类对象,调用内部类函数
- C++ primer 这本书上有这么两句话“派生类虚函数调用基类版本时,必须显式使用作用域操作符。如果派生类函数忽略了这样做,则函数调用会在运行时确定并且将是一个自身调用,从而导致无穷递归。”
- 工厂模式:封装对象的创建(一、在基类中定义一个静态成员函数)
- 实现函数 makeClosures,调用之后满足如下条件: 1、返回一个函数数组 result,长度与 arr 相同 2、运行 result 中第 i 个函数,即 result[i](),结果与 fn
- C++第三周任务3请在原类基础上,增加成员函数,要求前三个设计成内置函数,在main()数中增加适当的调用以展示扩充类定义后的功能(最好能一次运行)。
- 在类外定义的函数,被成员函数调用时,报运行时错误error LNK2005:已经在 classinfo.obj 中定义
- 以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径),以及求面积的成员函数area,实现其他需要的成员函数,设计main函数完成测试
- C++ Pirmer : 第十五章 : 面向对象程序设计之基类和派生的定义、类型转换与继承与虚函数
- 【6.13】 定义基类Base,其数据成员为高h,定义成员函数disp为虚函数。然后再由High派生出长方体类Cuboid与圆柱体类Cylinder。并在两派生类中定义成员函数disp为虚函数。在主函
- 11周1--2以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径),以及求面积的成员函数area,实现其他需要的成员函数,设计main函数完成测试;
- [5.19]设计一个虚基类base,包含姓名和年龄私有数据成员以及相关的成员函数;由它派生出领导类leader,包含职务和部门私有数据成员以及相关的成员函数;再由base派生出工程师类engieer,
- JAVA中申请了两个对象,分别在调用方法和声明方法中把其中一个对象直接赋值给另外一个对象,运行结果,求原理。
- 编写一个程序,定义一个职工类,输入3个职工的编号、姓名、工资和年龄, 类中的成员函数实现输入、输出,在主函数中定义对象,并计算输出3个职工的平均工资。
- CPoint作为基类,派生出描述一条直线的类Cline,再派生出一个矩形类CRect。要求成员函数能求出两点间的距离、矩形的周长和面积等
- C++继承类和基类之间成员函数和虚函数调用机制
- C++继承类和基类之间成员函数和虚函数调用机制
- 写一个程序,定义抽象基类Shape,由它派生出3个派生类,Circle(圆形)、Rectangle(矩形)、Triangle(三角形)。用如下的main()函数,求出定义的几个几何体的面积和
- 再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,再增加数据成员h(高),,以及求圆柱表面积的成员函数area和求圆柱体积的成员函数volume,实现需要的成员函数,并设计main
- 多态继承情况下,有一个基类指针指向派生类对象,如何用它调用基类的虚函数?