C++ - 继承虚函数调用 代码

继承虚函数调用 代码

本文地址: http://blog.csdn.net/caroline_wendy

派生类继承基类时, 使用virtual时, 会进行动态绑定, 没有virtual关键字则会覆盖.

使用基类指针(Base*)指向派生类时, 调用函数, 则动态绑定的函数会调用派生类, 非动态绑定的函数调用基类.

代码:

/*
 * main.cpp
 *
 *  Created on: 2014.9.12
 *      Author: Spike
 */

/*eclipse cdt, gcc 4.8.1*/

#include <iostream>

using namespace std;

class Base {
public:
	Base(int j) : i(j) {}
	virtual ~Base() {}
	void func1() {i*=10; func2();}
	int getValue() {return i;}
protected:
	virtual void func2() {i++;}
protected:
	int i;
};

class Child : public Base {
public:
	Child(int j) : Base(j) {}
	void func1() {i*=100; func2();}
protected:
	void func2() {i+=2;}
};

int main(void)
{
	Base* pb = new Child(1);
	pb->func1();
	cout << pb->getValue() << endl;
	return 0;
}

输出:

12

时间: 2024-12-14 12:14:11

C++ - 继承虚函数调用 代码的相关文章

【足迹C++primer】52、转换和继承,虚函数

转换和继承,虚函数 Understanding conversions between base and derived classes is essential to understanding how object-oriented programming works in C++. 理解基类和派生类之间的转换是必不可少的 理解面向对象编程在. Like built-in pointers, the smart pointer classes (§12.1, p. 450) support

【足迹C++primer】52、,转换和继承虚函数

转换和继承,虚函数 Understanding conversions between base and derived classes is essential to understanding how object-oriented programming works in C++. 理解基类和派生类之间的转换是不可缺少的 理解面向对象编程在. Like built-in pointers, the smart pointer classes (§12.1, p. 450) support

sizeof 和类继承 虚继承 求类大小

代码: #include <iostream> using namespace std; /* class a{ float k; // 4字节 virtual void foo(){} //有一个4字节的指针指向自己的虚函数表 }; class b : virtual public a{ virtual void f(){} }; 有这样的一个指针vptr_b_a,这个指针叫虚类指针,也是四个字节:还要包括类a的字节数,所以类b的字节数就求出来了. 运行结果: 8 16 */ /* clas

C++基础6 【继承】 类型兼容 satatic 多继承 虚继承 【多态】 案例 虚析构函数 重载重写重定义

[继承] 继承的访问控制域 图 类型兼容性原则  指针 与 引用 用子类直接初始化父类 类的继承模型示意 图 [继承结论] [非常重要的概念] 继承与组合混搭情况下,构造和析构调用原则 原则:先构造父类,再构造成员变量.最后构造自己 先析构自己,在析构成员变量.最后析构父类 继承中,同名的成员变量的处理办法 继承中,同名的成员函数的处理办法 派生类中的static关键字 如果静态成员变量,你没有使用,也没有初始化的话 编译不会报错 经典错误 : 类中函数默认是private的,无法在外部访问 具

C++继承详解之三——菱形继承+虚继承内存对象模型详解vbptr(1)

在我个人学习继承的过程中,在网上查阅了许多资料,这些资料中有关菱形继承的知识都是加了虚函数的,也就是涉及了多态的问题,而我在那个时候并没有学习到多态这一块,所以看很多资料都是云里雾里的,那么这篇文章我想以我自己学习过程中的经验,由简到较难的先分析以下菱形继承,让初学者先对这个问题有一点概念,在后面会由浅入深的继续剖析. 本篇文章不会涉及到多态也就是虚函数的菱形继承,在后面的文章更新中,我会慢慢把这些内容都加进去. 菱形继承(也叫钻石继承)是下面的这种情况: 对应代码如下: #include <i

WordPress作者的相关函数调用代码

WordPress作者的相关函数调用代码,本文参考的是WordPress中文版的维基.网上这样的文章有很多,但是总是不详细或者是有错误,这里的函数是我们经常在使用中要搜索的文章,贴出来给大家了参考. <?php the_author(); ?> 显示文章的作者 <?php the_author_description(); ?> 显示文章作者的描述(作者个人资料中的描述) <?php the_author_login(); ?> 显示文章作者的登录名 <?php

菱形虚拟继承&虚函数表&对象模型

菱形继承: Assitant的菱形继承对象模型 Assitant中有两份Person成员,存在二义性和数据冗余. 所以我们引出了虚拟继承. virtual虚继.不会在子类中创建父类成员,但是子类中可以引用,就像指针一样.主要用在菱形继承,也叫钻石继承. 虚拟继承对象模型 class Student : vitrual public Person class Teacher : virtual public Peraon 虚函数表 通过一块连续内存来存储虚函数的地址.这张表解决了继承.虚函数(重写

虚函数调用(2)(转载)

如果父类虚函数没有被覆盖,则这个虚函数是完全没有意义的. 如有以下两个类的继承情况: class Base{ public: virtual void f(){ cout<<"Base::f()" <<endl; } virtual void g(){ cout<<"Base::g()" <<endl; } virtual void h(){ cout<<"Base::h()" <

C/C++ 多继承(虚继承和构造顺序)

C/C++:一个基类继承和多个基类继承的区别 1.对个基类继承会出现类之间嵌套时出现的同名问题,如果同名变量或者函数出现不在同一层次,则底层派生隐藏外层比如继承基类的同名变量和函数,不会出现二义性,而如果出现在同一阶层, 则会 出现二义性,解决办法:要么在同一阶层的底层(派生类)中重新定义可以解决,或者使用虚继承(减少部分二义性) 2.虚继承保证多次继承相同基类但只有一份基类数据(保证共享); 3.虚继承的构造顺序由编译器按照派生类列表从左往右寻找虚基类函数,先构造虚基类部分,然后按照正常构造从