C++允许在派生类对继承的方法访问控制重新定义,可以放松或者添加更严格的限制。
这点和Java是不同的,Java不能对继承过来的成员添加更严格的限制,因为这样会
"违反Liskov替换原则"。
而C++的多态是依赖于指针和引用的(当然Java也是reference),而指针或者引用
编译时的访问权限检查是检查指针或引用类型的,所以C++采取了一种看似不够直观的
设计:使用基类指针和引用访问多态调用派生类的方法,继承来的方法其访问控制与在派生类定义的访问控制无关,只于指针和引用类型定义的访问控制相关。这样既能够不违反"Liskov替换原则",又能够对继承的方法添加更严格的限制,而这中更严格的访问控制显的很鸡肋,可以将对象简单的被基类的指针或引用持有就可以突破。
#include <iostream>
using namespace std;
class A{
public:
virtual void test(){
cout << "A::test" << endl;
}
};
class B: public A{
private:
virtual void test(){
cout << "B::test()" << endl;
}
};
int main(){
B b;
A &a = b;
a.test(); //ok B::test()
//b.test(); compile error
};
分享到:
相关推荐
C++继承是面向对象编程(OOP)中的一个核心概念,它允许一个类(子类或派生类)从另一个类(基类或父类)继承特性,从而实现代码的重用和扩展。在Qt框架中,C++的继承机制同样被广泛应用,以构建丰富的用户界面和...
6. 继承中的访问控制:解释公有继承、保护继承和私有继承的区别,以及它们对子类访问权限的影响。 7. 小结和最佳实践:总结继承的使用场景,提供关于何时以及如何使用继承的最佳实践。 通过学习这个视频教程,你将...
《C++继承与派生课件》 C++作为一门强大的面向对象编程语言,其核心概念之一就是继承与派生。这两个概念是实现代码复用和构建复杂对象模型的关键技术。继承允许创建一个新的类(派生类),它不仅包含原有类(基类)...
保护继承的优点是可以继承基类的公有成员和保护成员,并且可以控制基类成员的访问权限。 在C++中,派生类可以继承多个基类,这种继承方式称为多继承。多继承可以使得派生类继承多个基类的成员和行为特征,但也容易...
通过公有、私有和保护继承,可以控制成员的访问权限。派生类继承基类的特性,并可以添加新的成员和功能,同时需要处理构造函数和析构函数的调用。多重继承则提供了从多个基类获取特性的能力,但也带来了潜在的复杂性...
总之,这个实验旨在通过实践加深对C++继承与派生类的理解,包括它们的定义、访问控制、多态性以及在实际问题中的应用。通过完成这个实验,学习者将能够更加熟练地设计和使用类的继承层次结构,进一步提升面向对象...
#### 三、访问控制与继承方式 - **继承方式与访问权限的区别**: - **继承方式**:用于控制派生类如何访问基类的成员,以及外部如何通过派生类对象访问基类成员。 - **访问权限**:定义了类自身成员的可见性,...
这就是C++中类继承的访问控制规则,它帮助我们构造出安全、灵活的类层次结构。 总的来说,理解和熟练运用`public`、`protected`和`private`访问控制对于编写高质量的C++代码至关重要。在实际编程中,需要根据需求...
虽然多继承提供了强大的功能,但它也带来了管理上的挑战,如对象布局的复杂性、构造和析构过程的细化以及访问控制的维护。 ### 示例场景:网络模拟 Stroustrup用一个网络模拟的例子来说明多继承的应用。假设我们...
总之,这个实验旨在通过实际操作加深对C++继承和派生的理解,特别是它们在构建类层次结构中的应用,以及如何处理与之相关的访问控制、构造/析构、二义性等问题。通过完成实验,学生能够更好地运用面向对象编程原则来...
### C++实现继承 #### 继承的概念与种类 ...综上所述,C++中的继承机制非常灵活且强大,通过合理利用不同的继承方式和访问权限,可以有效地管理和控制类之间的关系,从而构建出复杂而又结构清晰的软件系统。
这种形式较少使用,主要用于控制继承的访问级别。 继承时,基类的构造函数和析构函数在创建和销毁子类对象时会自动调用。子类可以覆盖基类的方法,通过使用`override`关键字来指定,这有助于防止意外覆盖。 例如,...
C++ 类访问控制是面向对象编程中的核心概念,它涉及到类的数据成员和成员函数的可访问性。在C++中,有三种访问控制修饰符:public、private 和 protected。 1. **Public** 访问控制: 公共成员(public members)...
C++中的继承和派生是面向对象编程的...它们提供了代码复用,支持类的层次结构,并通过访问控制和二义性处理机制来保持代码的清晰性和可维护性。理解并熟练掌握这些概念对于深入学习C++和开发面向对象的程序至关重要。
C++和C#都提供了访问控制,但C#的默认封装更严格,使得代码更安全。C++允许在基类中直接访问派生类的非静态成员,而C#则需要通过公共接口或方法进行访问。 总之,C++的继承机制提供了更多的灵活性,包括多重继承,...
### C++继承初步学习 #### 一、继承与派生的概念 继承是C++中面向对象编程的一个核心特性,它允许我们基于现有的类来创建新的类,而不必完全重写代码。通过继承,一个类(派生类)可以从另一个类(基类)那里继承...
C++ 类访问控制机制是面向对象编程中的核心概念,它主要涉及到`public`、`private`和`protected`这三个访问修饰符。它们的作用是限制类的成员(数据成员和成员函数)在不同作用域内的可访问性,从而实现数据封装和...
C++ 类访问控制的条件总结 最近在使用C++创建类的时候,忽然发现自己对于类访问控制 public,protected,private 的作用没有理解透彻,后来就查了些资料,这里以作记录。 访问控制 C++类的重要属性就是封装和继承。...