`

虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承

    博客分类:
  • c++
 
阅读更多

虚函数:虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。是C++中多态性的一个重要体现,利用基类指针访问派生类中的成员            函数,这种情况下使用虚函数,这种情况下采用的是动态绑定技术。

          虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的一般形式:

 

          virtual 函数返回值类型 虚函数名(形参表)

 

          { 函数体 }

动态绑定:基类指针是调用派生类的中的成员函数还是调用基类中的成员函数要到程序运行时确定。主要要看指针所指向的对象。

纯虚函数:纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”

              virtual void funtion1()=0

虚基类、抽象类:包含纯虚函数的类称为抽象类。由于抽象类包含了没有定义的纯虚函数,所以不能定义抽象类的对象。

虚函数继承:

  虚函数继承就是覆盖。即基类中的虚函数被派生类中的同名函数所覆盖。 是实现多态的方法。

class parent 
  { 
  public: 
  vitual void foo(){cout < <"foo from parent";}; 
  void foo1(){cout < <"foo1 from parent";}; 
  }; 
  class son:public parent 
  {   
  void foo(){cout < <"foo from son";}; 
  void foo1(){cout < <"foo1 from son";}; 
  }; 
  int main() 
  { 
  parent *p=new son(); 
  p->foo(); 
  p->foo1(); 
  return 0; 
  } 

  其输出结果是: 
  foo from son,foo1 from parent

虚继承:

  解决多重继承中派生类成员函数调用模糊问题。比如类A中有一个函数print(),类B继承A,类C继承A,类D继承类B和类C,这个时候,类D中就有两个print函数,一个是   从B继承得到的,一个是从C继承得到的,则,类D的对象调用print函数就会出现print模糊的编译错误。解决办法:类B虚拟继承A。类C虚拟继承A,类D继承B,C时,只拷   贝A中的数据成员和函数成员一次,再遇到拷贝时候就忽略了!

 

  虚继承就是为了节约内存的,他是多重继承中的特有的概念。适用与菱形继承形式。 
  如:类B、C都继承类A,D继承类B和C。为了节省内存空间,可以将B、C对A的继承定义为虚拟继承,此时A就成了虚拟基类。 
  class A; 
  class B:public vitual A; 
  class C:public vitual A; 
  class D:public B,public C; 

 

分享到:
评论

相关推荐

    C++面向对象技术完全剖析_源代码(继承,封装,多态,虚函数,纯虚函数,虚拟继承,多重继承,函数重载,指针……)

    第三个:基类 派生类的关系 以及如何访问抽象类 纯虚函数 还应包含有对象成员(除了一般成员外) ----------------------------------------------------- 带有多对象成员的虚拟多继承 要求:1、虚函数 多态 多态表现...

    后端 / C++ 类 封装 继承 多态 stl容器 虚函数 纯虚函数 友元函数 模板

    定义含有纯虚函数的类为抽象类,不能实例化,只能作为基类使用。 7. **友元函数(Friend Functions)**:友元函数不是类的成员,但可以访问类的私有和受保护成员。它们可以用来打破封装,实现特定的协作需求,但需...

    C++_虚函数和纯虚函数区别

    纯虚函数的存在使类成为一个抽象类,即不能创建该类的实例,但可以声明指向派生类的指针或引用。纯虚函数是派生类必须实现的接口,确保派生类遵循基类定义的规范。一旦派生类实现了纯虚函数,该函数就变成了一个普通...

    继承,虚函数,抽象类

    抽象类可以包含未定义的虚函数,这些未定义的虚函数称为纯虚函数,声明形式为`virtual void func() = 0;`。如果一个类包含至少一个纯虚函数,那么这个类就是抽象类。派生类必须实现所有抽象基类的纯虚函数,否则也是...

    函数覆盖,虚函数,纯虚函数对比

    - **抽象性**:只有包含纯虚函数的类才是抽象类,不能直接创建实例,只能被继承。 **源代码示例:** 在`virtualMethodTest`中,我们可以找到关于这些概念的实际应用。例如,可能有一个基类`Base`声明了虚函数`foo...

    Java与C++在虚函数,纯虚函数上的区别

    一个包含至少一个纯虚函数的类被称为**抽象类**,抽象类不能被实例化,只能作为其他类的基类。如果派生类没有提供纯虚函数的实现,那么这个派生类也将被视为抽象类。 在Java中,没有直接对应于C++纯虚函数的概念,...

    C++实验六 多态性和虚函数的应用 课程 实验报告

    综上所述,该实验通过设计抽象类和派生类,使用虚函数实现多态性,展示了面向对象编程的关键概念,如继承、封装、多态和动态绑定。这些概念对于理解和编写复杂的C++程序至关重要。通过这样的实践,学生能够更好地...

    虚函数和纯虚函数.pdf

    虚函数和纯虚函数是C++面向对象编程中的核心概念,它们主要涉及到继承和多态性的实现。在C++中,虚函数(virtual function)允许我们通过基类指针或引用调用派生类中重定义的同名函数,从而实现动态绑定或运行时多态...

    C++中的虚函数和纯虚函数用法(ZT)

    纯虚函数使得包含它的类成为抽象类,抽象类不能直接创建对象,只能作为其他类的基类。 **纯虚函数的定义形式:** ```cpp virtual &lt;返回类型&gt; &lt;函数名&gt;([参数列表]) = 0; ``` 例如: ```cpp class AbstractBase { ...

    多态性与虚函数习题.docx

    抽象类是指具有纯虚函数的类,抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。 14. 虚函数的重写: 派生类可以重新定义基类中的虚函数,但必须具有相同的参数个数和类型。 15. 虚函数的调用: 可以...

    C++ 虚函数与多态 教学PPT

    类 Print.";...多态性是C++面向对象编程的重要特性,通过虚函数、纯虚函数和抽象类,开发者可以创建灵活的代码结构,实现更高效的设计。理解并熟练掌握多态性,能够帮助编写出更加模块化、可扩展的软件。

    虚函数与const指针

    如果一个类包含了纯虚函数,称此类为抽象类 。 需要注意的是,不是所有的函数都可以声明为虚函数。只有类的成员函数才能说明为虚函数;静态成员函数不能是虚函数;内联函数不能为虚函数(但是在类中定义的成员函数...

    xuhanshu.zip_C++xuhanshu_xuhanshu_虚函数

    - **抽象类**:只有包含纯虚函数的类才是抽象类,抽象类只能作为基类使用,不能创建对象。 - **强制实现**:派生自含有纯虚函数的基类时,必须实现所有的纯虚函数,否则派生类也会是抽象类。 4. **多态性**: ...

    C++ 虚函数和抽象类的简单应用(cpp&h文件)

    虚函数允许子类重写基类方法,而抽象类定义了子类必须遵循的规范。在VS2010这样的开发环境中,我们可以方便地组织和管理这些类的源代码文件,以便于项目的开发和维护。通过理解和熟练运用这些概念,可以提高代码的可...

    C++虚函数多态和纯虚函数多态的经典示例源码

    纯虚函数则更进一步,它在基类中定义了一个没有实现的函数,使得基类成为一个抽象类(Abstract Class)。抽象类不能实例化,但可以作为其他类的基类,提供统一的接口。纯虚函数的声明如下: ```cpp class Abstract...

    多态性与虚函数习题

    - **解释**: 虚函数的声明与继承规则,以及派生类如何继承基类中的虚函数。 5. **答案**: 对象指针; 引用; 运行; 基类指针; 运行时 - **解释**: 通过对象指针或引用调用虚函数实现运行时多态性,而通过基类指针则...

    面向对象的虚函数使用总结

    纯虚函数则是进一步强化这一特性的工具,它使得基类成为一个抽象类,只能作为其他类的基底,不允许直接创建实例。 首先,我们来看一下虚函数的定义。在C++中,通过在函数声明前加上`virtual`关键字,就可以将其声明...

Global site tag (gtag.js) - Google Analytics