【C++】子类在重写虚函数时,会覆盖父类的函数

//子类在重写虚函数时,会覆盖父类的函数
#include <iostream>
using namespace std;
class B
{
public:
	B()
	{
		cout<<"Create B!"<<endl;
	}
public:
	virtual void fun()
	{
		cout<<"B::fun()"<<endl;
	}
	virtual void show()
	{
		cout<<"B::show()"<<endl;
	}
	void print()
	{
		cout<<"B::print()"<<endl;
	}
};

class D : public B
{
public:
	D()
	{
		cout<<"Create D!"<<endl;
	}
public:
	void fun()
	{
		cout<<"D::fun()"<<endl;
	}
	void show()
	{
		cout<<"D::show()"<<endl;
	}
	virtual void list()
	{
		cout<<"D::list()"<<endl;
	}
};

void main()
{
	D d;
	B *p=&d;
	p->fun();
	p->show();
}
<img src="http://img.blog.csdn.net/20150512213921986?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZG91ZG91d2ExMjM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

时间: 2024-10-29 19:09:56

【C++】子类在重写虚函数时,会覆盖父类的函数的相关文章

php protected只能被继承,不可以在实例中调用,parent::调用父类(子类函数的重载对父类的函数没有影响)

<?php class a { private function fun1(){ echo 'a1'; } //protected 可以被继承,但是只能在子类中使用,不能被实例化调用 protected function fun2(){ echo 'a2'; } public function fun3(){ echo 'a3'; } } class b extends a{ public function __construct(){ $this->fun2(); } public func

通过重写虚方法实现加法运算

实现效果: 知识运用: 虚方法:允许被其子类重新定义的方法 声明时使用virtual修饰符 重写方法:使用相同的签名重写继承的虚方法  两者联系:虚方法主要用来引入新方法 而重写方法则使从基类继承而来的虚方法的专用化(其具体实现) 实现代码: /// <summary> /// 建立的虚方法可以在子类中被重写 /// </summary> class Operation { public virtual double operation(double d,double b) { r

面向对象(子父类中函数的特点-覆盖)

/* 2,子父类中的函数. 当子类出现和父类一模一样的函数时,//不同名的函数,父类中的非私有函数子类乐意直接拿来用. 当子类对象调用该函数,会运行子类函数的内容. 如同父类的函数被覆盖一样. 这种情况是函数的另一个特性:重写(覆盖)   //前面讲了一个函数的特性,重载//其实父类中的方法还在内存当中,只是没有运行而已. 当子类继承父类,沿袭了父类的功能,到子类中,  //覆写的好处可以用于扩展. 但是子类虽具备该功能,但是功能的内容却和父类不一致, 这时,没有必要定义新功能,而是使用覆盖特殊

C++类的成员函数(在类外定义成员函数、inline成员函数)

类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private(私有的).public (公用的)或protected(受保护的). 在使用类函数时,要注意调用它的权限(它能否被调用)以及它的作用域(函数能使用什么范围中的数据和函数).例如私有的成员函数只能被本类中的其它成员函数所调用,而不能被类外调用.成员函数可以访问本类中任何成员(包括私有的和公用的),可

继承(父类为虚方法以及子类的重写)

定义父类为虚方法时需要关键字  virtual 子类重写需要关键字  override 示例代码: //父类   public class People    {        //虚方法        //VR Virtual Reality  虚拟现实        //AR Augmented Reality 增强现实        public virtual void SayHello()        {            Console.WriteLine("父类打招呼的方法&

C++ virtual函数重写,在继承的时候没有在函数前写virtual关键字也依然是虚函数吗?

比如: 1 class Base 2 { 3 Base() {}; 4 ~Base() {}; 5 virtual void Init(); 6 }; 7 8 class Derived:public Base 9 { 10 virtual void Init();//virtual是必须的吗? 11 }; 答案:c++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数.因此,在子类从新声明该虚函数时,可以加,也可以不加,但习惯上每一层声明函数时都加virtual,使程序

关于继承时子类重写父类方法和覆盖父类变量的若干问题

假设,子类重载父类的方法,并将子类的成员覆盖. 创建子类对象实例,将其上转型成父类. 例子1 public class Parent { public void init() { System.out.println("1 init parent"); this.demo(); } public void demo() { System.out.println("2 demo parent"); } } public class Son extends Parent

final,static静态和非静态,初始化和代码块的区别、父类和子类中都有static变量时的初始化顺序、重写equals()、 instanceof强制转换

final:类不能被继承,方法不能被重写,属性值不能被修改(常量): 可以调用: static静态常量----- 不需要创建对象,可以直接调用类里面的属性,方法: 示例如下: 加了static说明它是属于整个类的,每个对象值都一样,如下图所示:size是静态的,所以当在下面t1对象中改变size的值时,整个类中的size值都变了:然后作为普通属性的length,当在t1对象中改变其值,并不会改变原始值: 静态方法不能调用非静态的方法和非静态的属性,也不能打印非静态的方法和非静态的属性:可以在静态

派生表中第一个基类没有虚函数,派生类存在虚函数时的内存布局

单继承的例子: #include <iostream> using namespace std; class A { public: A() { a = 1; ch = 'a'; //ASCII码97 } private: int a; char ch; }; class C : public A { public: C() { c = 3; } virtual void print() { cout << "C" << endl; } privat