C++虚函数、赋值兼容原则

 1 #include <iostream.h>
 2
 3 class A
 4 {
 5 public:
 6     void f1()
 7     { cout << "a" << endl; }
 8     virtual void f2()
 9     { cout << "b" << endl; }
10 };
11
12 class B : public A
13 {
14 public:
15     void f1()
16     { cout << "c" << endl; }
17     virtual void f2()
18     { cout << "d" << endl; }
19 };
20
21 void main()
22 {
23     A a;
24     B b;
25     a.f1();
26     a.f2();
27     b.f1();
28     cout << "--------------------" << endl;
29
30     A *pa = &b;
31     pa->f1();//a
32     pa->f2();//d
33     cout << "-------------------" << endl;
34
35     A *fa = (A *)&b;
36     fa->f1();//a
37     fa->f2();//d
38     cout << "-------------------" << endl;
39 }
时间: 2024-08-04 03:45:49

C++虚函数、赋值兼容原则的相关文章

一个例子说明虚函数

本例子说明以下问题: 虚函数的定义,调用(外部函数的指针或引用,成员函数),构造函数和析构函数中调用虚函数,虚析构函数 赋值兼容,构造函数的重载,构造函数的初始化列表 见代码: #include<iostream> using namespace std; class Base { public: Base():m(1),n(m+1){Display();} //构造函数中调用虚函数时自己的虚函数 Base(int x,int y):m(x),n(y){} void setxy(int x,i

【继承与多态】C++:继承中的赋值兼容规则,子类的成员函数,虚函数(重写),多态

实现基类(父类)以及派生类(子类),验证继承与转换--赋值兼容规则: 子类对象可以赋值给父类对象(切割/切片) 父类对象不能赋值给子类对象 父类的指针/引用可以指向子类对象 子类的指针/引用不能指向父类对象(可以通过强制类型转换完成) #include<iostream> using namespace std; class People    //父类或者基类 { public:     void Display()     {         cout << "_na

(继承及其访问限定符)&&(派生类及其默认成员函数)&&(赋值兼容规则)

◆继承: ★继承概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能.这样产生新的类,称派生类.继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程. 继承定义格式 ★继承关系&访问限定符 class Base { public: Base() { cout<<"B()" <<endl; } ~Base () { cout<<"~

(继承及其访问限定符)&amp;&amp;(派生类及其默认成员函数)&amp;&amp;(赋值兼容规则)

◆继承: ★继承概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能.这样产生新的类,称派生类.继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程. 继承定义格式 ★继承关系&访问限定符 class Base { public: Base() { cout<<"B()" <<endl; } ~Base () { cout<<"~

C++多态和虚函数学习笔记

1.从实现的角度看,多态可以划分为两种情况:编译期多态和运行时多态. 前者是在编译过程中,确定同名操作的具体操作对象,从而确定同名函数的具体实现: 后者是在程序运行过程中,动态确定具体的操作对象,从而确定同名函数的具体实现. 这种确定操作具体对象的过程成为联编或联合.联编就是将一个标识符和一个存储地址联系在一起的过程,是计算机程序自身彼此相关联的过程. 从联编进行的不同阶段,可以将联编分为静态联编和动态联编. (1)静态联编是指联编工作在程序编译和连接阶段完成的联编过程.静态联编是程序编译之前进

C++多态性与虚函数

面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为.在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体.也可以这样说就是实现了"一个接口,多种方法". 从实现的角度来讲,多态可以分为两类:编译时的多态性和运行时的多态性.前者是通过静态联编来实现的,比如C++中通过函数的重载和运算符的重载.后者则是通过动态联编来实现的,在C++中运行时的多态性主要是通过虚函数来实现的. 赋值兼容     不过在说虚函数之前,先介绍一个有关

C++之多态性与虚函数

面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为.在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体.也可以这样说就是实现了“一个接口,多种方法”. 从实现的角度来讲,多态可以分为两类:编译时的多态性和运行时的多态性.前者是通过静态联编来实现的,比如C++中通过函数的重载和运算符的重载.后者则是通过动态联编来实现的,在C++中运行时的多态性主要是通过虚函数来实现的,也正是今天我们要讲的主要内容. 1.不过在说虚函数之前,我想先介

JS-特效 ~ 05. 缓动框架兼容封装/回掉函数/兼容透明度/层级、旋转轮播图、正则表达式、验证表单注册账号、

缓动函数中opcity  写百分值的值 JS一般不用小数运算,会照成精度丢失 元素的默*认透明度是 层级一次性赋值,不缓动 利用for-in为同一个父元素的子元素绑定属性 缓动框架兼容封装/回掉函数/兼容透明度/层级 function animate(ele,json,fn){ //先清定时器 clearInterval(ele.timer); ele.timer = setInterval(function () { //开闭原则 var bool = true; //遍历属性和值,分别单独处

[转]C++之多态性与虚函数

面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为.在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体.也可以这样说就是实现了“一个接口,多种方法”. 从实现的角度来讲,多态可以分为两类:编译时的多态性和运行时的多态性.前者是通过静态联编来实现的,比如C++中通过函数的重载和运算符的重载.后者则是通过动态联编来实现的,在C++中运行时的多态性主要是通过虚函数来实现的,也正是今天我们要讲的主要内容. 1.不过在说虚函数之前,我想先介