关于C++的子类指针指向父类】的更多相关文章

基类指针引用派生类对象 用基类指针引用一个派生类对象,由于派生类对象也是基类的对象,所以这种引用是安全的; 但是只能引用基类成员. 若试图通过基类指针引用那些只在派生类中才有的成员,编译器会报告语法错误. (解决该问题的答案是虚函数和多态性??? 这个说法不正确吧) 派生类指针引用基类的对象 用派生类指针引用基类的对象. 这种引用方式会导致语法错误. 派生类指针必须先强制转换为基类指针,这种方法是不安全的. 而在侯捷的<深入浅出MFC>中"第二章C++重要性质"中: 如果你…
c++多态性是依靠虚函数和父类指针指向子类对象来实现的.简单来说,父类中定义虚函数,父类指针指向子类对象,父类指针调用函数时调用的就是子类的函数. 父类没有定义虚函数,父类指针指向子类对象时,父类指针调用的函数还是父类的函数. dynamic_cast可以实现将子类指针动态转换成父类指针(相当于父类指针指向了子类对象),用dynamic_cast时,父类必须要有virtual声明的虚函数. 父类指针转换成子类指针(也就是子类指针指向了父类对象)是危险的,dynamic_cast失败会返回NULL…
子类的对象内存布局包括两部分:父类和子类派生部分,所以执行父类的构造函数只不过是在构造子类对象的父类部分.因此子类对象的this指针是指向子类对象自己.…
class A {public:A() { printf("A \n"); }~A() { printf(" ~A \n"); } // 这里不管写不写virtual,删除B对象的时候,都会被执行.因为这个例子是B*指针指向B对象,不是A*指针指向B对象.}; class B : public A{public:B() { printf("B \n"); }~B() { printf("~B \n"); }}; int mai…
我认为是这样,类的成员函数都在代码区,不同的类的成员函数在代码区有自己的类名称空间限制,类的虚函数在虚函数表中,程序执行的时候,是先在虚函数表中找该成员函数,如果没有找到,就去该类在代码区的成员函数中去找. 所以如果父类的成员函数加上virtual时,访问的时候是先在虚函数表中查找,如果找到了,就执行,没找到就再在该类的代码区查找.所以父类普通的成员函数只能在父类的代码区找到. 也就是说通过父类指针找普通成员函数时,虽然父类指针指向子类对象,通过父类指针只能访问子类对象的数据成员(部分,父类独有…
class A {public: A() { printf("A \n"); } ~A() { printf(" ~A \n"); } // 这里不管写不写virtual,删除B对象的时候,都会被执行.因为这个例子是B*指针指向B对象,不是A*指针指向B对象.}; class B : public A{public: B() { printf("B \n"); } ~B() { printf("~B \n"); }}; int…
1.父类指针可以指向子类对象 静态联翩:如果以父类指针指向派生类对象,那么经由该指针只能访问父类定义的函数 动态联编:根据指针实际指向的对象类型确定 2.面试宝典 P110 面试题5  #include<iostream> #include<string> #include<vector> using namespace std; class B { private: int data; public: B() { cout<<"default c…
看下面例子: #include "stdafx.h" #include <iostream> class A {  //父类 public: void  f()   //普通函数 { std::cout<<"A"<<std::endl; } void virtual vf()   //虚函数 { std::cout<<"virtual-A"<<std::endl;  } }; class…
// // Cat.h // OC3-父类指针指向子类对象 // // Created by qianfeng on 15/6/17. // Copyright (c) 2015年 qianfeng. All rights reserved. // #import "Animal.h" @interface Cat : Animal { float _height; } @property (assign,nonatomic)float height; @end // // Cat.m…
我们在程序中定义了一个基类,该基类有n个子类,为了方便,我们经常定义一个基类的指针数组,数组中的每一项指向都指向一个子类,那么在程序中我们如何判断这些基类指针是指向哪个子类呢? 本文提供了两种方法 (1) 自定义类id, (2)typeid 一.自定义id 如下所示基类father有两个子类son1 和 son2,我们在基类中定义类虚函数id,子类中分别重载了该函数,各个子类返回值都不同 class father { public: virtual void fun() { cout<<&qu…