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++中面向对象编程的一个核心特性,它允许我们基于现有的类来创建新的类,而不必完全重写代码。通过继承,一个类(派生类)可以从另一个类(基类)那里继承...
派生类成员的访问属性取决于基类成员的访问控制符以及继承时使用的访问控制符。具体规则如下: - **Public继承**:基类中的public和protected成员在派生类中保持不变,而private成员不可见。 - **Protected继承**:...
C++ 类访问控制机制是面向对象编程中的核心概念,它主要涉及到`public`、`private`和`protected`这三个访问修饰符。它们的作用是限制类的成员(数据成员和成员函数)在不同作用域内的可访问性,从而实现数据封装和...
C++ 类访问控制的条件总结 最近在使用C++创建类的时候,忽然发现自己对于类访问控制 public,protected,private 的作用没有理解透彻,后来就查了些资料,这里以作记录。 访问控制 C++类的重要属性就是封装和继承。...