【C++】通过基类的指针变量访问派生类中由基类继承来的隐藏对象

//<img src="http://img.blog.csdn.net/20150512213309005?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZG91ZG91d2ExMjM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
// 可以将一个派生类的对象的地址赋给其基类的指针变量,但只能通过这个指针访问派生类中由基类继承来的隐藏对象,
//不能访问派生类中的新成员。同样也不能反过来做。

#include <iostream>
using namespace std;
class B
{
public:
	B()
	{
		cout<<"B"<<endl;
	}
	void fun()
	{
		cout<<"B::fun()"<<endl;
	}
private:
	int x;
};

class D : public B
{
public:
	D()
	{
		cout<<"D"<<endl;
	}
	void fun()
	{
		cout<<"D::fun()"<<endl;
	}
	void show()
	{
		cout<<"D::show()"<<endl;
	}
private:
	int y;
};
void main()
{
	D d;
	B *pb = &d;
	pb->fun();
	// pb->D::fun();
	// pb->show();    //错误,通过基类的指针变量不能访问派生类中的新成员
}
<img src="http://img.blog.csdn.net/20150512213309005?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZG91ZG91d2ExMjM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

时间: 2024-10-07 04:42:48

【C++】通过基类的指针变量访问派生类中由基类继承来的隐藏对象的相关文章

类的静态变量访问

<?php /** * @author keke * @copyright 2016 * 这是一个类的标准格式,用于记忆,静态变量访问:student::$fee */ class student { public static $fee = 0; public $name; function __construct($name) { $this->name = $name; //非静态属性访问格式:$this->name } public static function runCode

【c语言】用指针变量输出一维数组中的数据

#include<stdio.h>void main(){    int i,*m,a[5];    printf("数组:"); //普通方式输出数组的元素    for(i=0;i<5;i++){        a[i]=rand()%100;            printf("%-4d",a[i]);    }    printf("\n");    m=&a; //指针变量输出数组的元素    for(i=0

黑马程序员——【Java基础】——File类、Properties集合、IO包中的其他类

---------- android培训.java培训.期待与您交流! ---------- 一.File类 (一)概述 1.File类:文件和目录路径名的抽象表现形式 2.作用: (1)用来将文件或文件夹封装成对象 (2)方便于对“文件”与“文件夹属性信息”进行操作 (3)File对象,可以作为参数传递给流的构造函数 (二)构造方法 * 通过File的构造函数创建File对象 方式1:File f = new File("c:\\a.txt"); 方式2:File f2 = newF

通过指针变量访问整型变量

#include <iostream> using namespace std; int main(){ int a=100,b=10; int *pointer1=&a,*pointer2=&b; cout<<a<<" "<<b<<endl; cout<<*pointer1<<" "<<*pointer2<<endl; return 0; }

类的继承定义一个computer类在此基础上派生出两个子类(继承与多态绑定)

题目如下 定义一个计算机类(Computer),并在它的基础上派生出两个子类:台上机(Desktop)和便携机类(Notebook),在Computer中定义几个方法,并在子类Desktop和Notebook中覆盖这些方法.在main方法中利用对象类型转换将类Desktop和Notebook的对象分别赋值给Computer对象,并应用多态调用这些方法. 实验目的 (1)       理解继承的概念,掌握继承的语法. (2)       学习定义和使用子类. (3)       掌握继承过程中的方

boost::serialization 用基类指针转存派生类(错误多多,一波三折)

boost::serialization 也支持c++的多态,这样我们就可以通过使用基类的指针来转存派生类, 我们接着上一篇( boost::serialization(2)序列化基类 )的例子来看: 基类和派生类的代码如下: class student_info { public: student_info() {} virtual ~student_info() {} student_info(const std::string& sn, const std::string& snm,

匿名内部类不能访问外部类方法中的局部变量,除非变量被声明为final类型

1. 这里所说的“匿名内部类”主要是指在其外部类的成员方法内定义,同时完成实例化的类,若其访问该成员方法中的局部变量,局部变量必须要被final修饰.2. 原因是编译程序实现上的困难:内部类对象的生命周期会超过局部变量的生命周期.局部变量的生命周期:当该方法被调用时,该方法中的局部变量在栈中被创建,当方法调用结束时,退栈,这些局部变量全部死亡.而内部类对象生命周期与其它类一样:自创建一个匿名内部类对象,系统为该对象分配内存,直到没有引用变量指向分配给该对象的内存,它才会死亡(被JVM垃圾回收).

C++拾遗--类成员指针

C++拾遗--类成员指针 前言 类成员的类型与一般类型不同,那么类成员的指针类型自然与一般类型的指针有所区别.我们有必要来探讨下类成员指针的使用. 正文 类成员指针是指可以指向类的非静态成员的指针.它的类型包括了类类型和所指向的成员类型.一般而言,指针指向的是对象,而类成员指针指向的是类成员而非类对象. 需要指出,类成员指针不是可调用对象,要想通过类成员指针调用类成员,需结合类对象或类指针.静态类型成员属于类,类型与普通指针相似. 数据成员指针 一般的声明形式: 成员类型 classname::

类成员指针——偏移量

成员指针只是记录一个成员的偏移量,而非地址,因为类中没有地址,选择一个类的成员只是意味着在类中偏移,只有把这个偏移和具体对象的首地址结合,才能得到实际地址. 成员指针并不指向一个具体的内存位置,它指向的是一个类的特定成员,而不是指向一个特定对象的特定成员,最直接的理解是将其理解为一个偏移量.这个偏移量适用于某一类A的任何对象,换言之,如果一个A类对象的成员a距离起点的偏移量是4,那么任何其他A类对象中,a的偏移都是4字节. 类对象访问其成员时,是根据该成员在类中的偏移量来访问的. 类成员指针,可