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

C++子类无法访问其他子类向量

C++子类无法访问其他子类向量是因为C++中的访问权限控制机制限制了子类之间的访问。在C++中,有三种访问权限:public、protected和private。

public权限表示成员可以被任何类访问,protected权限表示成员可以被当前类和其子类访问,private权限表示成员只能被当前类访问。默认情况下,类的成员(包括变量和函数)的访问权限是private。

当一个子类继承自一个父类时,它可以访问父类的public和protected成员,但无法直接访问其他子类的成员。因此,如果存在多个子类,它们之间的成员是相互独立的,无法直接访问彼此的成员。

如果需要在子类中访问其他子类的成员,可以通过以下方式实现:

  1. 将需要访问的成员设置为protected权限:将需要在子类中访问的成员声明为protected,这样子类就可以访问该成员。但需要注意的是,这样做会使得该成员对于其他类也是可见的,可能会破坏封装性。
  2. 使用友元类:可以将需要访问的子类声明为友元类,这样子类之间就可以相互访问彼此的成员。但同样需要注意,友元类的使用应该谨慎,因为它会破坏封装性和继承性。

综上所述,C++子类无法直接访问其他子类的成员,但可以通过设置protected权限或使用友元类的方式实现子类之间的成员访问。

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

相关·内容

C++ Trick:小心,子类隐藏父类成员函数

本文讲的是一个C++语言的小Trick,您或许了解也或许不了解,各位看官请细听分说。...子类可以直接调用set_birth。 “这有什么值得一说的?”你夺门而出,我连忙追上去让你把门还我。 您接着瞧,如果子类现在需要实现一个传入int类型的set_birth呢?.../include/c++/v1/string:875:5: note: candidate function operator __self_view() const _NOEXCEPT { return...果然,子类已经无法调用父类的public成员函数了。明明刚才还可以,怎么set_birth(string)对子类突然不可见了呢? 奥秘在于,子类重载了父类的同名函数。...此时父类的函数确实对子类是不可见的…… 这其实不是一个复杂的知识点,只是容易让人稍不留意就遗忘。 解决方案是什么呢?其实也不难,想办法让父类的同名函数对子类可见!

1.7K10

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

一、public 公有继承 - 示例分析 1、类型兼容性原则 类型兼容性原则 : C++ 的 " 类型兼容性原则 “ 又称为 ” 赋值兼容性原则 " ; 子类代替父类 : 需要 基类 ( 父类 ) 对象的...作为 父类对象 使用 ; 赋值 : 将 子类对象 赋值给 父类对象 ; 初始化 : 使用 子类对象 为 父类对象 初始化 ; 指针 : 父类指针 指向 子类对象 , 父类指针 值为 子类对象 在 堆内存...的地址 , 也就是 将 子类对象 地址 赋值给 父类类型指针 ; 引用 : 父类引用 引用 子类对象 , 将 子类对象 赋值给 父类类型的引用 ; 二、类型兼容性原则 - 示例分析 定义父类 Parent...() { cout << "子类 funChild 函数" << endl; } }; 1、父类指针 指向 子类对象 定义 一个子类对象 Child child ; 定义父类的指针...或 父类引用 , 此处可以直接传入 子类指针 或 子类引用 ; // 函数接收父类指针类型 // 此处可以传入子类对象的指针 void fun_pointer(Parent* obj) { obj

16300

C++】多态 ⑥ ( 函数重定义涉及的问题 - 子类覆盖父类函数名 )

int b) 函数" << endl; } void fun(int a) { cout << "执行 父类 void fun(int a) 函数" << endl; } }; // 子类...class Child : public Parent { public: void fun(int a, int b) { cout << "执行 子类 void fun(int a, int...错误原因分析 : 函数重定义 带来的问题 , 子类覆盖父类函数名 ; 函数重定义的函数名称覆盖问题 : C++ 编译器 发现 Child c 对象要调用 void fun(int a, int b,...int c) 函数 , 子类中已经存在 fun 函数了 , 子类 会 覆盖 父类的函数名 , C++ 编译器只会在 子类查找 该函数 , 不会去父类 查找 ; 子类查找函数 : C++ 编译器 在 子类中找到了...void fun(int a, int b) 和 void fun(int a) 两个函数 , 没有找到 3 个参数的函数 , 此时 C++ 编译器会报错 : error C2661: “Child:

15920

C++】继承 ③ ( 继承的一些重要特性 | 子类拥有父类的所有成员 | 多态性 | 子类可以拥有父类没有的成员 | 代码示例 )

一、继承的一些重要特性 1、子类拥有父类的所有成员 子类 继承 父类 , 则 子类 拥有 父类的 所有 成员变量 和 成员函数 ; 这里要注意 : 子类 拥有 父类的 私有成员 , 但是 子类不能 直接访问...父类 的 私有成员 , 必须通过 父类的 公有或受保护 的成员函数 访问 父类的 私有成员 ; 子类 不能访问 父类的 私有成员 , 并不代表 子类 中没有 父类的 私有成员 ; 下面的 Parent...父类中 , 定义了私有成员函数 privateFun ; 如果 Child 子类 继承上述 Parent 父类 , 子类中 无法直接调用 privateFun 函数 ; 如果在父类中 , 定义一个 共有成员函数...子类 可以 在 继承自 父类 的 成员变量 和 成员函数 基础上 , 定义 其它的 成员变量 和 成员函数 ; 因此 , 子类 可以 拥有 父类 所没有的 成员变量 和 成员函数 ; 在下面的代码中...可以当做 父类对象 使用 ; 注意 : 如果 使用 子类对象 为 父类对象 进行初始化 , 则该对象 不能调用 子类独有的成员; 部分代码示例 : 父类 与 子类 的代码 , 参考上面的章节的 Parent

46930

【自然框架】 页面里的父类——把共用的东东都交给父类,让子类专注于其他

类图里面Tree、Main1、DataDelete1、DataForm1、DataList1不是父类,而是共用页面)       这个是依据自然框架的特点来设置的,目的就是把共用的代码都放到父类里面,减轻子类的代码量...这两个函数并不是在这里被调用,而是给子类准备的。 3、  PageURL。public class PageURL : PagePermission       这里面要处理URL传递过来的参数。...删除数据是一件很复杂的事情,一个页面是不可能搞定的,这个页面只是实现最最简单的删除的功能,其他复杂的就需要单独写代码实现了。...总结:URL参数的验证、权限的验证、访问记录的验证、控件属性赋值等,都交给父类去做,子类就可以不用去考虑权限的问题,专心致志的处理好自己的业务逻辑了。...对了,还有一点忘记说了,这是一个独立的、单独的项目,他编译后会生成 Nature.BaseUI.dll 文件,然后在做新的的项目的时候可以引用这个dll文件,然后在把其他的.aspx文件拷贝到项目的指定的文件夹里面

78691

C++】类型转换 ④ ( 子类 和 父类 之间的类型转换 - 动态类型转换 dynamic_cast )

| 字符串转换 ) , 简单介绍了 C++ 类型转换 ; 在 博客 【C++】类型转换 ① ( C 中的类型转换 | C++ 类型转换操作符 | const_cast | static_cast |...dynamic_cast | reinterpret_cast ) 将 C 语言 和 C++ 中的类型转换进行了对比 ; 在 博客 【C++】类型转换 ② ( C++ 静态类型转换 static_cast..., 分析 C++ 环境下 使用 各种方式 进行 父类 和 子类 类型之间的转换 , 推荐使用 动态类型转换 dynamic_cast ; 一、子类 和 父类 之间的类型转换 - 动态类型转换 dynamic_cast...C++ 面向对象 应用场景中 , 涉及到 父类 和 子类 之间的转换 ; 很明显 C 语言的 强制类型转换 , 不管是 隐式 还是 显示 转换 , 都无法转换 C++ 对象的类型 ; 动态类型转换 dynamic_cast...一般用于 父类 ( 对象 / 指针 / 引用 ) 和 子类 ( 对象 / 指针 / 引用 ) 之间的转换 , 是 C++ 语言特有的 , C 语言中没有该转换类型 ; 1、构造父类和子类 编写一个 父类

37210

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

一、public 公有继承 - 示例分析 1、类型兼容性原则 类型兼容性原则 : C++ 的 " 类型兼容性原则 “ 又称为 ” 赋值兼容性原则 " ; 子类代替父类 : 需要 基类 ( 父类 ) 对象的...作为 父类对象 使用 ; 赋值 : 将 子类对象 赋值给 父类对象 ; 初始化 : 使用 子类对象 为 父类对象 初始化 ; 指针 : 父类指针 指向 子类对象 , 父类指针 值为 子类对象 在 堆内存...的地址 , 也就是 将 子类对象 地址 赋值给 父类类型指针 ; 引用 : 父类引用 引用 子类对象 , 将 子类对象 赋值给 父类类型的引用 ; 二、类型兼容性原则 - 示例分析 ---- 定义父类...funChild() { cout << "子类 funChild 函数" << endl; } }; 1、父类指针 指向 子类对象 定义 一个子类对象 Child...或 父类引用 , 此处可以直接传入 子类指针 或 子类引用 ; // 函数接收父类指针类型 // 此处可以传入子类对象的指针 void fun_pointer(Parent* obj) { obj

23620

C++反汇编第四讲,反汇编中识别继承关系,父类,子类,成员对象

C++反汇编第四讲,反汇编中识别继承关系,父类,子类,成员对象 讲解目录:    1.各类在内存中的表现形式   备注: 主要复习开发知识,和反汇编没有关系,但是是理解反汇编的前提....       2.子类继承父类      2.1 子类中有虚函数,父类中有虚函数    : 都有的情况下        2.2 子类中没有虚函数,父类中有虚函数   : 子类没有,父类有的情况 2.1...一丶各类在内存中的表现形式(复习开发知识) 讲解之前,我们首先要明白C/C++中的类的内存结构.继承之后的内存结构 普通类的内存结构:   高级代码: class MyTest { public:...父类构造中先填写虚表指针.   2.父类构造完成之后,子类会重新写入虚表指针.   3..子类继承父类,都有虚函数的情况下,会产生复写行为, 对象首地址4个字节处填写虚表.  2.2 子类中没有虚函数,...且只要父类有虚函数,不管子类有没有虚函数,子类都会产生虚表,且会复写虚表指针. 2.3 子类有虚函数,父类没有虚函数 高级代码: 子类中定义了虚函数,父类则把虚函数去掉了.

97190

C++】继承 ⑩ ( 继承机制中的 static 静态成员 | 子类中访问父类静态成员的方法 )

一、继承机制中派生类中的 static 关键字 1、子类继承父类静态成员 子类继承父类静态成员 : 父类 ( 基类 ) 中 使用 static 关键字 定义的 静态成员变量 , 可以被所有的 子类 (...和 保护成员 可以在子类访问 , 私有成员不可在子类中访问 ; 父类中的 public 成员 变为 子类中的 protected 成员 ; 父类中的 protected 成员 仍然是 protected...都不可在子类中访问 ; 父类中的 public 成员 变为 子类中的 private 成员 ; 父类中的 protected 成员 变为 子类中的 private 成员 ; 父类中的 private...成员 仍然是 private 成员 ; 3、子类如何访问父类静态成员 子类中 使用 父类类名 :: 静态成员名 Parent::c = 20; 或 子类类名 :: 静态成员名 Child::c = 40...; 或 对象名.静态成员名 child.c = 30; 的方式 , 访问 继承自 父类的 静态成员 ; 4、静态成员使用要点 参考 【C++】静态成员变量 ( 静态成员变量概念 | 静态成员变量声明 |

35510

C++ 语言】面向对象 ( 继承 | 重写 | 子类调用父类方法 | 静态多态 | 动态多态 | 虚函数 | 纯虚函数 )

继承表示 : C++ 中继承可以使用 “:” 符号 , 格式为 "class 子类名称 : 父类名称{};" //父类 class Parent{ }; //子类 //继承父类 Parent class...private ) 继承 : 如果继承的作用域是私有的 ( private ) , 那么继承的所有的方法都是私有的 , Parent 中的 public 和 protected 方法会变成私有的 , 外部无法访问该方法...C++ 多继承 : Java 中只能进行单继承 , 但是在 C++ 中是可以继承多个父类的 ; 在多继承时 , 使用 “,” 将多个父类分隔即可 ; 5....C++ 多继承作用域 : 多继承中 , 每个父类的作用域都可以单独指定; #pragma once //父类 class Parent{ public: void parent_method()...析构方法 : 必须设置成虚函数 , 释放子类对象内存时 , 必须释放子类对象的内存 , 否则子类对象的内存永远不会被释放 ; 3.

1.1K20

C++】多态 ⑤ ( 虚析构函数 | 虚析构函数语法 | 虚析构函数意义 | 父类指针指向子类对象情况下父类和子类使用 virtual 虚析构函数 | 代码示例 )

一、虚析构函数 1、构造函数不能是虚函数 构造函数 不能定义为 虚函数 , 不能使用 virtual 关键字修饰 ; 如果要创建一个 子类的 实例对象 , 需要 从 该子类的 最上层的 父类开始 , 沿着继承路径...类 继承 B 类 ; 如果要创建 C 类 的 实例对象 , 需要从 最顶层的 父类 A 类 开始 , 先调用 A 的构造函数 , 然后调用 B 的构造函数 , 最后调用 C 的构造函数 ; 参考 【C+..., 则只会调用 父类 的 析构函数 , 子类的析构函数不会被调用到 ; 虚析构函数 可以确保 首先调用 子类 的 析构函数 , 然后调用 父类 的析构函数 ; 这样可以 避免在 释放 子类对象 时出现...非虚函数 ; 二、代码示例 - 虚析构函数 1、代码示例 - 没有使用虚析构函数导致子类析构函数无法调用 在下面的代码中 , 声明 子类指针 指向 子类对象 , 释放 子类指针 时 先调用 子类析构函数...virtual 关键字修饰 ; 声明 子类指针 指向 子类对象 , 释放 子类指针 时 先调用 子类析构函数 , 再调用父类析构函数 ; 声明 父类指针 指向 子类对象 , 释放 父类指针 时 先调用

60520

c++ 之三种继承方式的学习总结

2、c++中支持三种不同的基础方式 public继承:父类成员在子类中保持原有访问级别 private继承:父类成员在子类中变为私用成员 protected继承:父类中的公有成员变为保护成员,其它成员保持不变...); ^ test.cpp:68:18: error: ‘Parent’ is not an accessible base of ‘Child_C’ 注解:当子类定义的对象...,如果继承关系不是public,那么子类定义的对象,就无法访问父类中的属性和方法了。...3、遗憾的事实 一般而言,c++工程项目中只使用public继承 c++的派生语言只支持一种继承方式(public继承) protected和private继承带来的复杂性远大于实用性 二、总结 c++...中支持3种不同的继承方式 继承方式直接影响父类成员在子类中的访问属性 一般而言,工程中只使用public的继承方式 c++的派生语言中支持public继承方式 好了,今天的分享就到这里,如果文章中有错误或者不理解的地方

25120

23.C++- 继承的多种方式、显示调用父类构造函数、父子之间的同名函数、virtual虚函数  上章链接: 22.C++- 继承与组合,protected访问级别

C++中,继承方式共有3种: public继承 -指父类的成员(变量和函数)访问级别,在子类中保持不变 private继承 -指父类的成员,在子类中变为private私有成员....-也就是说子类无法访问父类的所有成员 protected继承 -指父类的public成员 ,在子类中变为protected保护成员,其它成员级别保持不变 如下图所示: ?...注意: protected继承只针对子类有效 比如当父类是protected继承时,则子类子类无法访问父类的所有成员 一般而言,C++项目只用到public继承 显示调用父类构造函数 当我们创建子类对象时...,编译器会默认调用父类无参构造函数 若有子类对象,也会默认调用子类对象的无参构造函数。...所以C++引入了虚函数概念,根据指针指向的对象类型,来执行不同类的同名覆盖成员函数,实现不同的形态 定义: 在父类成员函数的返回值前面,通过virtual关键字声明,这样便能访问子类中的同名成员函数了

3.1K90

C++】多态 ⑩ ( 不建议将所有函数都声明为 virtual 虚函数 | 多态的理解层次 | 父类指针和子类指针步长 )

对象可以直接获取到自身封装的 普通函数 , 如果要访问虚函数 , 需要增加一次寻址操作 , 因此 这里建议不需要将有 多态 需求的函数声明为 虚函数 ; C++ 中 指向某类型对象的 指针 的 运算 ,...是 根据 指针类型 进行的 , 指针 自增 ++ , 指针的地址值 会增加 指针类型字节大小 ; 指针的 步长 是 根据 指针 指向的 内存空间 的数据类型确定的 ; 子类 继承 父类 , 如果 子类...没有添加任何 成员函数 与 成员方法 , 那么子类指针 与 父类指针 的步长是相同的 ; 一、不建议将所有函数都声明为 virtual 虚函数 C++ 类中 , 每个 成员函数 都可以声明为 virtual...指针数据类型 : C++ 中 指针 是 数据类型 的 一种 , 对 指针 进行 自增 ++ 或 自减 – 操作 , 指针的 地址值 是根据 指针类型 改变的 ; 指针运算 : C++ 中 指向某类型对象的...; p->fun(); c->fun(); // 步长加 1 , 然后继续调用 // 指针步长自增 是 根据 声明的 类型 进行自增的 // 不根据 实际的类型 自增 p++; c+

23350

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

问题 C++如何实现不能被继承的类,即终结类。Java中有final关键字修饰,C#中有sealed关键字修饰,而C++目前还没有类似的关键字来修饰类实现终结类,需编程人员手动实现。...联想到C++的单例模式singleton,也是用到了这个方法,C++的单例模式的实现见如下代码: class CSingleton { private: CSingleton(){}...一个基类如果被虚拟继承,那么在创建它的孙子类的对象时,该基类的构造函数需要单独被调用。此时,如果该基类的构造函数在孙子类的构造函数中无法访问,那么就实现了基类的子类不能被继承。...public: FinalClassChild():a(0){}; }; int main(int argc,char* argv[]) { FinalClassChild f;//报错,无法访问...参考文献: [1]陈刚.C++高级进阶教程[M].武汉:武汉大学出版社,2008:280-282

1.7K20

C++终结类

所以,只要类的构造函数在子类中无法被访问,那么就阻止了该类被继承,实现终结类。 如果将一个类的构造函数声明为私有(private),可以阻止该类进一步派生,但是该类也无法直接实例化了,此方法行不通。...联想到C++的单例模式Singleton,也是用到了这个方法,C++的单例模式的实现见如下代码: class CSingleton { private: CSingleton(){}...一个基类如果被虚拟继承,那么在创建它的孙子类的对象时,该基类的构造函数需要单独被调用。此时,如果该基类的构造函数在孙子类的构造函数中无法访问,那么就实现了基类的子类不能被继承。...public: FinalClassChild():a(0){}; }; int main(int argc,char* argv[]) { FinalClassChild f; //报错,无法访问...---- 参考文献 [1]陈刚.C++高级进阶教程[M].武汉:武汉大学出版社,2008:280-282

51020
领券