首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++如何指向类中的私有继承类对象

C++中,可以使用指针来指向类中的私有继承类对象。私有继承是一种继承方式,它允许派生类继承基类的接口和实现,但不能直接访问基类的私有成员。

要指向类中的私有继承类对象,可以先定义一个指向基类的指针,然后将其指向派生类对象。通过这个指针,可以访问派生类对象中继承自基类的公有成员和受保护成员。

下面是一个示例代码:

代码语言:txt
复制
#include <iostream>

class Base {
public:
    void baseMethod() {
        std::cout << "Base method" << std::endl;
    }
};

class Derived : private Base {
public:
    void derivedMethod() {
        std::cout << "Derived method" << std::endl;
    }
};

int main() {
    Derived derivedObj;
    Base* basePtr = &derivedObj; // 使用指针指向私有继承类对象

    basePtr->baseMethod(); // 可以访问基类的公有成员

    // basePtr->derivedMethod(); // 错误,无法访问派生类的成员

    return 0;
}

在上述示例中,Derived类私有继承了Base类。在main函数中,我们创建了一个Derived类的对象derivedObj,然后定义了一个指向Base类的指针basePtr,并将其指向derivedObj。通过basePtr,我们可以调用基类的公有成员函数baseMethod()

需要注意的是,由于私有继承的特性,我们无法通过basePtr直接访问派生类Derived的成员函数derivedMethod()

腾讯云相关产品和产品介绍链接地址:

请注意,以上只是腾讯云的一些相关产品,其他云计算品牌商也提供类似的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++对象,封装,继承(派生),多态

文章目录 1. 2.对象 3.封装 4.继承(派生) 5.多态 1. 就是同一事物总称,比如我(一个对象)可以讲话,那么基本上所有人都具备这个属性,就将我这一对象称为思想就是这样产生...在C++语言中,对象行为是以函数(方法)形式定义对象属性是以成员变量形式定义,而包括对象属性和函数。...而C++在C结构体基础上,除了public访问,还增加了private(私有),protected(保护),并且默认是private。...在C++,人类这种大类被称为父,而学习电脑,学习英语这几类人被称为子类,他们都是父分离出来,他们有着必然联系,他们都是人。 下面的例子和上面的例子无关,我们继续拿Animal这个说。...,当你用一个基指针或引用 指向一个继承对象时候,调用一个虚函数时, 实际调用继承版本。

98830

C++私有成员会被继承

1.派生间接访问基私有成员 在继承私有成员在派生是“不可见“,这种”不可见“是指在派生成员函数,或者通过派生对象(指针,引用)不能直接访问它们。...2.私有成员会被继承吗 如果基并没有提供访问私有成员公有函数,那么其私有成员是否“存在“呢?还会不会被继承呢?...其实,这些私有成员的确是存在,而且会被继承,只不过程序员无法通过正常渠道访问到它们。考察如下程序,通过一种特殊方式访问了私有成员。...没有提供访问私有成员变量i公有方法,但是在A(以及A派生对象个,都包含变量i。...综上所述,私有成员一定存在,也一定被继承到派生,从大小也可以看出派生包含了基私有成员,读者可自行考证。只不过收到C++语法限制,在派生访问基私有成员只能通过间接方式进行。

2.3K20

c++对象关系_对象只能访问该类私有成员

以及对象关系以及访问修饰符 一.概念: 二.对象关系: 三.组成: 四.创建: 五.访问修饰符: 一.概念: 是对于某一对象一个统称,对象抽象化,对象实例...所有或成员,任何代码均可访问该项,访问权限最大也就意味着最不安全 Private访问修饰符:范围:私有的,只有内部可以进行访问,允许一个将其成员变量和成员函数对其他函数和对象进行隐藏。...只有同一个函数可以访问它私有成员。即使是实例也不能访问它私有成员。...访问权限最小意味着针对于对象自己而言最安全; Protected访问修饰符:范围:受保护以及子类可以进行访问,允许子类访问它成员变量和成员函数。这样有助于实现继承。...和内嵌成员,只有派生可以访问该项; Internal访问修饰符:范围:内部,默认,程序集内部可以访问,允许一个将其成员变量和成员函数暴露给当前程序其他函数和对象

1.6K10

C++继承 ② ( 继承语法 | 三种继承 - 共有继承 保护继承 私有继承 | 继承与父私有成员 | 子类访问父私有成员 | 代码示例 )

保护成员 , 只能在内部 或 子类 访问它们 ; Child 不能继承 Parent 私有成员 ; private : 私有继承 Child 继承了 Parent 所有公有和保护成员..., 这些成员会被声明为私有的 , 只能在内部访问它们 ; Child 不能继承 Parent 私有成员 ; 3、继承与父私有成员 C++ 三种继承 公有继承 public 保护继承 protected...私有继承 private 只针对 父 " 公有成员 " 和 " 保护成员 " , 这两种成员是可以被继承 ; 父 " 私有成员 " 是无法被子类 继承 和 访问 ; 父 私有成员...只能在 父 , 由父自己成员访问 ; 除 父 之外任何 , 包括子类 , 都不能访问 父 私有成员 , 这是为了保护 封装性 和 安全性 而制定规则 ; 4、子类访问父私有成员...子类 不能直接访问 父 私有成员 , 但是可以通过在 父 中提供 公有 或 保护 成员函数 来访问这些私有成员 ; 这些成员函数可以在子类重写或复用 , 以便让子类能够访问和操作基私有成员

22610

C++对象--继承(详细讲解)

Low,也不符合C++是面向对象语言标准,而且会使得代码量加大,这个在企业开发是一定要杜绝 继承版网页 //继承版网页 class ZhuYe { public: void head(...,一是自己增加成员 从基继承过来表现其共性,而新增成员则体现了个性 二、继承方式 三种继承方式 公共继承 保护继承 **私有继承 从图可知: 父私有成员,不管子类以哪种方式继承,都不可访问...就像父亲银行卡密码,就算你是他儿子,他也不会告诉你,因为那是他私有财产 三、继承对象模型 问题,从父继承过来成员,哪些属于子类?...: 先构造父,再构造子类,析构顺序与构造顺序相反 五、继承同名成员处理方式 问题:当子类与父出现同名成员,如何通过子类对象访问父同名数据呢?...继承同名静态成员在子类对象如何访问?

10510

C++私有成员会被继承

1.派生间接访问基私有成员 在继承,基私有成员在派生是“不可见“,这种”不可见“是指在派生成员函数,或者通过派生对象(指针,引用)不能直接访问它们。...2.私有成员会被继承吗 如果基并没有提供访问私有成员公有函数,那么其私有成员是否“存在“呢?还会不会被继承呢?...其实,这些私有成员的确是存在,而且会被继承,只不过程序员无法通过正常渠道访问到它们。考察如下程序,通过一种特殊方式访问了私有成员。...没有提供访问私有成员变量i公有方法,但是在A(以及A派生对象个,都包含变量i。...综上所述,私有成员一定存在,也一定被继承到派生,从大小也可以看出派生包含了基私有成员,读者可自行考证。只不过收到C++语法限制,在派生访问基私有成员只能通过间接方式进行。

2.3K41

C++继承 ⑥ ( 继承构造函数和析构函数 | 类型兼容性原则 | 父指针 指向 子类对象 | 使用 子类对象 为 父对象 进行初始化 )

一、public 公有继承 - 示例分析 1、类型兼容性原则 类型兼容性原则 : C++ " 类型兼容性原则 “ 又称为 ” 赋值兼容性原则 " ; 子类代替父 : 需要 基 ( 父 ) 对象..." 公有继承 " 派生 ( 子类 ) 本质上 具有 基 ( 父 ) 完整功能 , 使用 基 可以解决问题 , 使用 公有继承派生 都能解决 ; 特别注意 : " 保护继承 " 和..." 私有继承 " 派生 , 是 不具有 基 完整功能 , 因为 最终继承派生 , 无法在 外部调用 父 公有成员 和 保护成员 ; 2、类型兼容性原则应用场景 " 类型兼容性原则...指向 子类对象 定义 一个子类对象 Child child ; 定义父指针 , 将 指针 指向 子类对象 地址 , 这是合法 ; 代码示例 : // 父对象 Parent parent...// 子类对象 可以调用 父公有函数 child.funParent(); // 将指向子类对象指针传给接收父指针函数 // 也是可以 fun_pointer

22020

C++继承 ⑥ ( 类型兼容性原则 | 父指针 指向 子类对象 | 使用 子类对象 为 父对象 进行初始化 )

一、public 公有继承 - 示例分析 1、类型兼容性原则 类型兼容性原则 : C++ " 类型兼容性原则 “ 又称为 ” 赋值兼容性原则 " ; 子类代替父 : 需要 基 ( 父 ) 对象..." 公有继承 " 派生 ( 子类 ) 本质上 具有 基 ( 父 ) 完整功能 , 使用 基 可以解决问题 , 使用 公有继承派生 都能解决 ; 特别注意 : " 保护继承 " 和..." 私有继承 " 派生 , 是 不具有 基 完整功能 , 因为 最终继承派生 , 无法在 外部调用 父 公有成员 和 保护成员 ; 2、类型兼容性原则应用场景 " 类型兼容性原则...定义 一个子类对象 Child child ; 定义父指针 , 将 指针 指向 子类对象 地址 , 这是合法 ; 代码示例 : // 父对象 Parent parent;...// 子类对象 可以调用 父公有函数 child.funParent(); // 将指向子类对象指针传给接收父指针函数 // 也是可以 fun_pointer

8900

对象,继承,派生,组合,多态

面向对象编程 1.对象 在python先有再有对象,对象,你可以看成,是把对象相同特征和相同方法汇总再一起,再根据来生成对象,这个对象具有特征与方法 1.命名 class 名...用.把对于值取出来再进行赋值修改,或者直接生成一个同名对象把原来覆盖掉 2.继承 1.父,子类 继承是一种新建方式,新建称为子类,被继承称为父 2.继承写法 class fu...) #from fu 3.查找顺序 #先查找对象他本身,如果没有,再去里面找,如果还没就去父本身找,在去父找,以此类推.直到没有会报错 #菱形继承除外 3.派生 在父和子类基础上,...super()会得到一个特殊对象,该对象就是专门用来访问父属性(按照继承关系) super()....__init__(不用为self传值) super完整用法是super(自己名,self),在python2需要写完整,而python3可以简写为super() ''' class son(fu

1.1K10

C++封装 ① ( 对象 | 面向对象三大特征 - 封装 继承 多态 | 封装引入 )

一、对象 1、对象概念 " 面向对象编程 " 是一种 " 编程范式 " , 可以适用于所有的 高级语言 , C++ 也包括在内 ; 面向对象编程 基于 " 对象 " 概念 , 在 对象 可以...; 继承 Inheritance : 创建一个新 子类 , 继承现有 父 属性和方法 , 子类可以添加新属性和方法以实现更强大功能 , 还可以重写父方法以实现不同行为 ; 通过继承...,可以构建一个 分层 层次结构 , 从而促进代码重用和扩展 ; 多态 Polymorphism : 一个接口 或 父引用可以指向多种实际类型 ; 面向对象三大特征 封装 Encapsulation...: 将 数据 和 操作 封装在 , 可以将 内部 实现细节 隐藏 , 只暴露有限 接口 与外部进行交互 , 从而达到保护 对象 内部状态 不被外部随意修改 ; 将 现实世界 存在...客观事物 封装成 抽象 , 包含了 数据 和 操作 , 只有 可信 对象 才能访问 隐藏起来信息 ; 大部分类默认只能访问 公开接口 ; C++ , 通过 "

15610

C++对象

---- 前言 祖师爷在设计 C++ 时,规定每个中都有六个默认成员函数,即使我们不主动写,编译器也会自动生成,这些成员函数就是神秘天选之子,不仅神秘,而且还很强大,可以这么说:对象是否学懂...,但最后两个相对来说比较简单,因此介绍也会比较少 默认成员函数规则比较多,尤其是构造和析构,当初祖师爷在设计时候,部分地方设计欠佳,导致后人在学习 C++ 时,额外增加了不少学习成本 下面就来看看祖师爷是如何设计...,默认构造函数很有用 题目:用栈实现队列 需要在队列这个,调用两个栈,实现队列 此时我们只需要写好栈默认构造函数 队列默认构造函数不需要写,因为自动生成会去调用自定义类型默认构造函数,...+中新关键字,operator 作用很简单,实现自定义类型运算 使用规则: operator 函数操作数取决于参数个数 operator 一般写在,方便通过 this 指针访问成员变量 写在时...,直接手动设置,每次都返回 nullptr ,当然这种情况几乎不存在 开发者何必为难开发者 ---- 总结 以上就是关于 对象全部内容了,本文主要侧重点为 六大天选之子,以及编译器自动生成默认成员函数

18610

C++对象

日期实现 7. const成员 8. 取地址及const取地址操作符重载 ---- 1. 6个默认成员函数 如果一个什么成员都没有,简称为空真的什么都没有吗?...// 无参不要像下面这样写 Date d4(); Date func(); 重点: 5.如果类没有显式定义构造函数,则C++编译器会自动生成一个无参默认构造函数,一旦用户显式定义编译器将不再生成。...对象生命周期结束时,C++编译系统系统自动调用析构函数 下面代码:没有初始化,也没有销毁函数,但是有构造函数和析构函数,在对象创建时候,已经初始化,在函数销毁时候,已经销毁了数据结构栈空间。...注意:this指向对象函数结束后不会销毁,故以引用方式返回提高效率 后置++: 前置++和后置++都是一元运算符,为了让前置++与后置++形成能正确重载 C++规定:后置++重载时多增加一个...①在创建返回月天数函数时候,不能将数组创建在函数外,

1.2K20

C++对象()

如果一个什么成员都没有,简称为空。空什么都没有吗?并不是的,任何一个在我们不写情况下,都会自动生成下面 6个默认成员函数。 在这个地方,对于这6个默认成员函数,前面四个是比较重要。...return 0; } 如果类没有显式定义构造函数,则C++编译器会自动生成一个无参默认构造函数,一旦用户显式定义编译器将不再生成 。...但是如果写在全局,又引发了另一个问题: 如何去访问私有属性❓ 1.直接把私有权限改为公共权限 2.在设置get和set方法,然后在外直接调用即可 3.友元声明 同时,全局变量/全局函数在所有文件...,实际修饰该成员函数隐含this指针,表明在该成员函数不能对任何成员进行修改。...至此,内容比较多了,我们先到这里结束掉我们对象()内容

1.2K30

PHP 面向对象继承

什么是继承 ---- 子类可以通过继承访问父成员。父又称为基, 子类又称为派生 PHP继承特点 : 单继承,一个子类只能继承一个父, 想要达到继承多个效果可以采用链式继承 2....有限继承 ---- PHP继承是有限,只能继承部分内容,并不能继承所有成员(常量、属性、方法) 有限继承概念总结:PHP继承只有私有方法不能被继承,其他成员都能被继承 可以继承成员...:所有常量、属性,公有(public)和受保护(protected)方法,特别注意:私有方法不会被继承 3....子类重写父成员 ---- 重写 (overwrite):子类定义与父重名成员,用于扩展或更改某些业务逻辑 站长源码网 重写规则如下: 重写成员是不是静态成员必须和父保持一致 重写针对是被继承成员..., 私有方法不会被继承, 因此不受重写规则限定

58730

c++对象

1.6个默认成员函数 在C语言中,当我们想使用结构体时且当结构体成员变量为指针变量(如:顺序表,链表等等)我们需要使用动态内存时,比较正规方法时建立初始化函数,在函数实现初始化。...而在c++编译器会自动为生成6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成成员函数称为默认成员函数。...构造函数是特殊成员函数,主要任务并不是开 空间创建对象,而是初始化对象。 如果在并没有显示定译构造函数,编译器会默认生成一个 无参默认构造函数。...注意:创建哪个对象则调用该类析构函数,销毁那个对象则调用该类析构函数 4拷贝构造函数 拷贝构造函数:只有单个形参,该形参是对本类类型对象引用(一般常用const修饰),在用已存在类型...; 而Stack为自定义类型,其中有a指针指向一块新开辟空间。

12110

关于Java对象、抽象、接口、继承之间联系

关于Java对象、抽象、接口、继承之间联系: 导读: 寒假学习JavaSE基础,其中概念属实比较多,关联性也比较大,再次将相关知识点复习一些,并理顺其中关系。...在动物又分为两:哺乳动物、卵生动物,而这个标准属于对动物标准进一步细化,应该称为子标准,所以此种关系可以使用接口继承来表示。...然后每个学生或者每个工人都是具体,那么就通过对象来表示; 由下面的图可知,所有的设计,接口应该是最先被设计出来,被子类所继承。 ?...抽象特点: 含有抽象方法一定是抽象 抽象不一定还有抽象方法 抽象既可以有抽象方法也可以有非抽象放方法 如果子类继承了抽象方法,要么重写抽象抽象方法,要么子类就声明为抽象...不能创建对象,因为方法没有具体实现,创建对象没有作用,抽象是用来继承 基本定义 abstract class Message{ private String type;

88220

C++对象对象引入

2.引入 C语言结构体只能定义变量,在C++,结构体内不仅可以定义变量,也可以定义函数。...:封装、继承、多态。...有这样一个问题: Date中有 Init 与 Print 两个成员函数,函数体没有关于不同对象区分,那当d1调用 Init 函数时,该函数是如何知道应该设置d1对象,而不是设置d2对象呢?...C++通过引入this指针解决该问题 即:C++编译器给每个“非静态成员函数“增加了一个隐藏指针参数this,让该指针指向当前对象(函数运行时调用该函数对象),在函数体中所有“成员变量”操作...所以对象不存储this指针; this指针是“成员函数”第一个隐含指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递; 9.结语 C++通过可以将数据以及操作数据方法进行完美结合

12710

C++实现不能被继承——终结

问题 C++如何实现不能被继承,即终结。Java中有final关键字修饰,C#中有sealed关键字修饰,而C++目前还没有类似的关键字来修饰实现终结,需编程人员手动实现。...但从C++11开始,提出了final关键字来申明终结。 2.       解决方法 基本思路:由于任何派生对象在创建时候,都必需在派生构造函数调用父构造函数。...所以,只要构造函数在子类无法被访问,那么就阻止了该类被继承,实现终结。 如果将一个构造函数声明为私有(private),可以阻止该类进一步派生,但是该类也无法直接实例化了,此方法行不通。...+实现不能被继承最为有效安全方便方法是使用“虚拟继承”。...一个基如果被虚拟继承,那么在创建它孙子类对象时,该基构造函数需要单独被调用。此时,如果该基构造函数在孙子类构造函数无法访问,那么就实现了基子类不能被继承

1.7K20
领券