C++的继承操作---基类指针访问派生类问题---基类成员恢复访问属性问题

#include "stdafx.h"
#include <iostream>
#include <algorithm>
using namespace std;

class Base
{
public:
	int num;
	virtual void func()
	{
		cout<<"Do something in Base"<<endl;
	}
};

class Derived:private Base
{
public:
	Derived(int i)/*:num(i)*/				//这样不行,在这里是初始化,而num在父类中已经进行了初始化
	{
		num=i;						//这样可以,在这里是赋值
	}     

	virtual void func()
	{
		cout<<"num="<<num<<endl;
		cout<<"Do something in Derived"<<endl;
	}

public:
	using Base::num;					//恢复访问属性

public:
	friend void getBasePtr(void);
};

void getBasePtr(void)
{
	Base* pb=new Derived(10);			<span style="white-space:pre">	</span>//这样就可以啦
	pb->func();
}

int main()
{
	//Base* pb=new Derived(10);		<span style="white-space:pre">		</span>//使用private和protected的继承属性后,不可以这样赋值
								//因为Base在Derived中已经是私有部分,不能在此处访问
								//所以无法完成转换
	getBasePtr();

	system("pause");
	return 0;
}

C++的继承操作---基类指针访问派生类问题---基类成员恢复访问属性问题,布布扣,bubuko.com

时间: 2024-08-05 11:18:43

C++的继承操作---基类指针访问派生类问题---基类成员恢复访问属性问题的相关文章

基类指针和派生类指针的使用总结

1 基类指针指向基类对象(正常使用) 2 派生类指针指向派生类对象(正常使用,不管是不是虚函数,调用的都是派生类的函数) 3 基类指针指向派生类对象(多态的体现,虚函数的话调用的是派生类的,非虚函数的话调用的是基类的) 4 派生类指针指向基类对象(一般不要这么用) 参考资料: http://blog.csdn.net/monkeyduck/article/details/15506435 [c++]实例演示类继承中派生类到基类的转换及虚函数 基类指针和派生类指针的使用总结

基类指针和派生类指针的使用总结2

为了做图像处理,需要用摄像头,搜到实验室只有一个摄像头,是国安的,具体参数在终端中看到: 本来担心这个摄像头在6410中能不能用,结果插上后得到如上显示,知道该摄像头是uvc的,可用,参考文章链接: http://www.cnblogs.com/emouse/archive/2013/03/03/2941938.html 在网上到处都可以下到ok6410摄像头测试程序,下载链接:http://download.csdn.net/download/harryching/5108478 于是下载后按

基类指针引用派生类对象

#include<iostream> #include<cstring> using namespace std; class A{ char name[20]; public: void put_name(char *n){ strcpy_s(name, n); } void get_name()const{ cout << name << endl; }; }; class B:public A{ char num[20]; public: void p

微信内置浏览器打开app下载网页提示已停止访问怎么办?哪些api接口可以恢复访问

微信内置浏览器打开app下载网页提示已停止访问怎么办?哪些api接口可以恢复网页正常访问? 现如今微信对第三方app下载链接的拦截是越来越严格了,下载链接在微信中分享转发经常会被拦截,一旦被拦截用户就只能复制链接手动打开浏览器粘贴才能访问,如此给用户带来的体验台差,用户量无法有效地累积起来,从而导致推广成本一直在增加,推广效率却无法有明显的提升. 所以针对这个问题,特写这篇文章分享哪些api接口可以免费实现微信内自动跳转浏览器下载app的功能. Mindjump-API接口平台 366API-接

面向对象--多继承&amp;派生类对象内存布局分析&amp;各基类指针所指向的位置分析

背景 原文链接:ordeder  http://blog.csdn.net/ordeder/article/details/25477363 关于非虚函数的成员函数的调用机制,可以参考: http://blog.csdn.net/yuanyirui/article/details/4594805 成员函数的调用涉及到面向对象语言的反射机制. 虚函数表机制可以查看下面这个blog: http://blog.csdn.net/haoel/article/details/1948051 总结为: 其一

c++之虚函数和基类指针

1. 基类指针虽然获取派生类对象地址,却只能访问派生类从基类继承的成员 1 #include <iostream> 2 using namespace std; 3 4 //通过基类指针只能访问从基类继承的成员 5 class A 6 { 7 public: 8 A(char x) 9 { 10 this->x = x; 11 } 12 //void virtual who() //基类定义虚函数,则派生类的重定义版本默认为虚函数 13 void who() //除非定义虚函数,否则基类

C++基础知识 基类指针、虚函数、多态性、纯虚函数、虚析构

一.基类指针.派生类指针 父类指针可以new一个子类对象 二.虚函数 有没有一个解决方法,使我们只定义一个对象指针,就可以调用父类,以及各个子类的同名函数? 有解决方案,这个对象指针必须是一个父类类型,我们如果想通过一个父类指针调用父类.子类中的同名函数的话,这个函数是有要求的: 在父类中,eat函数声明之前必须要加virtual声明eat()函数为虚函数. 一旦某个函数被声明为虚函数,那么所有派生类(子类)中eat()函数都是虚函数. 为了避免你在子类中写错虚函数,在C++11中,你可以在函数

派生类地址比基类地址少4(子类与基类指针强行转换的时候,值居然会发生变化,不知道Delphi BCB是不是也这样) good

大家对虚表并不陌生,都知道每个含有虚函数的类对象都有1个虚指针,但是在现实使用中,却总是因为这而调试半天,才发现原来是虚指针惹的祸.我这几天在调试代码时候也中招了,我的问题是这样的,如下图,CTree是最底层基类(非虚类), CSamplerTree(虚类)派生自CTree,CMSamplerTree,CASamplerTree派生自CSamplerTree,                                                         CTree中包括两个成员

何使用派生类指针指向基类,即downcast向下转型?

基类指针指向派生类,我们已经很熟了.(视频下载) (全部书籍)假如我们想用派生类反过来指向基类,就需要有两个要求:1)马克-to-win:基类指针开始时指向派生类,2)我们还需要清清楚楚的转型一下. if you want to use derived class pointer point to base class, there are two requirements: 1) base class pointer is initially the type of the derived c