#include <iostream> using namespace std; class Pet //基类 { public: virtual void Speak() { cout<<"How does a pet speak ?"<<endl; } }; class Cat : public Pet //派生类 {public: void Speak() { cout<<"miao!miao!"<<endl; } }; class Dog : public Pet //派生类 {public: void Speak() { cout<<"wang!wang!"<<endl; } }; void test (Pet &testClass){ testClass.Speak(); } int main() { Pet obj,*p1; //基类对象指针p1, 基类对象obj Dog dog1; Cat cat1; obj = dog1; //用Dog类对象给Pet类对象赋值 obj.Speak(); p1 = &cat1; //用Cat类对象地址给基类指针赋值 p1->Speak(); p1 = &dog1; //用Dog类对象地址给基类指针赋值 p1->Speak(); Pet &p4 = cat1; //以Cat类对象初始化Pet类引用 p4 .Speak(); test(dog1); system("pause"); return 0; }
输出是:How does a pet speak ? miao!miao! wang!wang! miao!miao! wang!wang!
发表评论
-
析构函数为虚函数的原因
2012-09-09 11:42 831我们知道,用C++开发的时候,用来做基类的类的析构函数 ... -
hash的应用
2012-08-31 23:02 961第一部分为一道百度面试题Top K算法的详解;第二部分为关 ... -
微软智力题
2012-08-29 19:59 566第一组1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有 ... -
C++不能被继承的类
2012-08-27 20:16 1058一个类不能被继承, ... -
括号对齐问题
2012-08-27 10:47 1409解法一:左右括号成一对则抵消 可以 ... -
树的遍历
2012-08-19 10:43 719/****************************** ... -
堆排序
2012-08-16 14:24 882堆:(二叉)堆数据结构是一种数组对象。它可以被视为一棵完全 ... -
static变量与static函数(转)
2012-08-13 10:15 746一、 static 变量 static变量大致分为三种用法 ... -
不用sizeof判断16位32位
2012-08-10 15:21 1703用C++写个程序,如何判断一个操作系统是16位还是3 ... -
找出连续最长的数字串(百度面试)
2012-08-09 15:15 1146int maxContinuNum(const char*in ... -
顺序栈和链栈
2012-08-06 10:01 799顺序栈:话不多说直接上代码 #include ... -
队列的数组实现和链表实现
2012-08-05 16:20 1024话不多少,数组实现上代码: #include<i ... -
KMP算法详解
2012-08-02 21:40 886KMP算法: 是在一个“主文本字符串” ... -
字符串的最长连续重复子串
2012-08-01 15:05 9777两种方法: 循环两次寻找最长的子串: <方法一> ... -
寻找一个字符串连续出现最多的子串的方法(转)
2012-07-31 21:19 986算法描述首先获得后缀数组,然后1.第一行第一个字符a,与第二行 ... -
字符串的循环移位
2012-07-31 16:52 974假设字符串:abcdefg 左循环两位:cdefgab 右 ... -
一次谷歌面试趣事(转)
2012-07-31 15:26 766很多年前我进入硅谷 ... -
约瑟夫环问题(循环链表)
2012-07-30 21:31 1290题目描述:n只猴子要选大王,选举方法如下:所有猴子按 1, ... -
面试之单链表
2012-07-30 20:18 7271、编程实现一个单链表的建立/测长/打印。 ... -
多重继承内存地址问题
2012-07-30 15:55 726[cpp] view plaincopy ...
相关推荐
// 多态赋值 b.F(); b.G(); a.F(); // 调用的是B类的F方法 a.G(); // 调用的是B类的G方法,体现了多态性 } } ``` 在这个例子中,虽然`a`变量是`A`类型,但实际上它引用的是`B`类型的实例。因此,当调用`a.G()...
6. **向上转型与向下转型**:多态中的向上转型是指将子类对象赋值给父类引用,允许我们使用父类的所有非私有成员。向下转型则是将父类引用转换为子类引用,以访问子类特有的成员。需要注意的是,不正确的向下转型会...
4. **向上转型(Upcasting)与向下转型(Downcasting)**:向上转型是指将子类对象赋值给父类引用,这是隐式的,编译器允许这么做,因为子类是父类的特例。而向下转型则是将父类引用转换为子类对象,需要显式进行,...
向上转型是指将子类对象赋值给父类引用,这是自动进行的,无须额外操作。例如: ```java Animal animal = new Cat(); // 向上转型,猫是动物的一种 animal.speak(); // 如果Cat类重写了speak(),则调用的是Cat的...
例如,在使用集合框架时,我们可以声明一个`List`类型的变量,然后将其赋值为`ArrayList`、`LinkedList`等不同实现的具体实例,而无需关心具体是哪一种实现,因为所有实现都遵循相同的接口规范。 此外,多态也是...
// 多态赋值 a.fun1(); // 调用B中的fun1 } } ``` **知识点**: 1. **方法重写**:子类中定义的方法与父类的方法具有相同的签名(方法名、参数列表和返回类型),且方法体不同。 2. **多态**:通过父类引用指向...
当我们创建一个接口类型的引用并将其赋值给实现该接口的类的对象时,这个引用变量可以调用接口中定义的所有方法。在运行时,实际调用的是哪个实现类的方法,取决于引用变量实际指向的对象。 以下是一个简单的例子:...
向上类型转换是指将子类的对象赋值给父类的引用,这一过程是自动进行的,无需显式转换。例如,在上述例子中,`Instrument` 类是 `Wind` 类的父类,因此,一个 `Wind` 类的对象可以被当作 `Instrument` 对象使用。...
5. **向上转型与向下转型**:在Java中,子类对象可以赋值给父类引用,这被称为向上转型。这种转型在编译时即可完成,因为所有子类都继承自父类。反之,将父类引用转换为子类对象的过程称为向下转型,但需要在运行时...
最近看DELPHI高手突破,把里面多态的说明,用代码实现了一下。多态性是允许用户将父对象设置成为与一个或更多的它的子对象相等的技术,赋值之后,基类 对象就可以根据当前赋值给它的派生类对象的特性以不同的方式...
1. 向上转型(Upcasting):将子类对象赋值给父类引用,这是自动完成的,无需显式转换。 2. 向下转型(Downcasting):将父类引用转换为子类对象,需要进行强制类型转换,并且只有在确定对象实际是子类类型时才能...
静态类型是变量声明时的类型,动态类型是实际赋值的对象类型。虚函数调用依赖于动态类型。 7. 多态的应用:多态在设计模式(如工厂模式、策略模式等)、接口设计、游戏编程、图形库等领域都有广泛应用,它可以提高...
3. **向上转型**:子类对象可以被赋值给父类引用,这种转换称为向上转型。在向上转型后,可以通过父类引用调用父类的所有非私有成员,但如果尝试调用子类特有的成员,编译器会报错,因为此时编译器只知道这是一个...
// 将子类对象赋值给父类引用 pa = new Child_A(); pa.simpleCall(); // 调用Child_A的实现 pa = new Child_B(); pa.simpleCall(); // 调用Child_B的实现 } } ``` 在这个例子中,`Parent`接口定义了一个名为...
例如,我们可以将一个`Dog`对象(假设`Dog`是`Animal`的子类)赋值给`Animal`类型的引用,这样就可以通过父类引用调用子类的方法。但需要注意的是,强制类型转换可能引发`ClassCastException`,因此在进行转换前应...
这样,我们可以在运行时动态地为`void *`赋值,存储任何类型的数据。 ```c typedef struct Node { void *data; struct Node *next; } Node; ``` 2. **宏定义处理**:利用C语言的宏,我们可以创建一组通用的操作...
在Java中,子类可以被视为其父类的一种类型,即子类对象可以赋值给父类类型的变量,这被称为类型多态。比如: ```java Person p = new Student(); ``` 多态的优点在于它可以提供接口与实现的分离,使得代码更加...
本篇将深入探讨Java多态中的类型转换,包括向上转型(Upcasting)和向下转型(Downcasting),以及相关的注意事项。 1. **向上转型(Upcasting)** 向上转型是指将子类的对象引用赋值给父类的引用。在Java中,这是...
对于变量,表示该变量一旦赋值后就不能改变。 7. **构造器与继承**: 子类可以调用父类的构造器初始化父类的状态。子类构造器的第一行通常是`super(parameters)`,用于调用特定的父类构造器。 8. **访问父类的...
`std::vector`、`std::list`等容器也支持多态性,因为它们可以存储任何类型的对象,只要这些对象满足一定的条件(通常是具有公有默认构造函数、复制构造函数和析构函数,以及可以被赋值的类型)。 总的来说,理解并...