C++派生类与基类同名成员访问原则解析
需积分: 9 50 浏览量
更新于2024-08-19
收藏 3.65MB PPT 举报
"同名覆盖原则-C++东南大学何洁月课件(总)"
在C++编程语言中,同名覆盖原则是面向对象编程的一个关键概念,特别是在类的继承和派生关系中。当一个派生类从基类继承时,如果基类和派生类中存在同名的成员(如变量或函数),则派生类的成员会覆盖基类的同名成员,这被称为成员函数的重写或隐藏。这一原则允许我们根据需要在派生类中对基类的功能进行扩展或修改。
首先,我们来看派生类如何访问同名成员。如果在代码中直接通过派生类的对象调用这个同名成员,那么实际执行的将是派生类中的那个成员。例如,如果我们有一个基类`Base`和一个派生类`Derived`,`Base`有一个名为`print`的方法,而在`Derived`中也定义了一个`print`方法,那么`Derived`的对象将会调用自己的`print`方法,而不是`Base`的。
```cpp
class Base {
public:
void print() { std::cout << "Base print" << std::endl; }
};
class Derived : public Base {
public:
void print() override { std::cout << "Derived print" << std::endl; }
};
int main() {
Derived d;
d.print(); // 输出 "Derived print"
return 0;
}
```
如果想在派生类对象中调用基类的同名成员,就需要使用作用域解析运算符`::`来指定基类的名字。这样,就可以强制使用基类的成员,而不是派生类的。在上面的例子中,可以这样访问基类的`print`方法:
```cpp
d.Base::print(); // 输出 "Base print"
```
这里提到了“派生类成员的标识与访问”,这涉及到C++的访问控制规则。C++提供了三种访问修饰符:`public`、`protected`和`private`。`public`成员可以在任何地方访问,`protected`成员可以在派生类中访问,而`private`成员只能在类的内部访问。这些修饰符决定了类的成员在类的外部和内部可访问的程度,以及在派生类中可访问性。
标签“c++”表明这是关于C++语言的知识,而提到的“9-1.c”到“9-5.c”可能是课程中的代码示例,这部分没有提供具体内容,所以无法详细解释。不过,它们通常包括了C++的基础语法,如运算符优先级和关联性,以及分支结构和循环结构的使用。
文件中还提到了结构体(structs)和联合(unions)的概念。结构体是C++中复合数据类型的例子,它允许我们将多个不同类型的数据成员组合在一起。而联合是一种特殊的结构,其所有成员共享同一块内存,这意味着改变其中一个成员的值,会影响到其他成员。
此外,还讨论了函数和类的区别。函数是一组完成特定任务的语句,而类是包含数据成员和成员函数的封装体,它定义了一种数据类型。在类中,可以使用`inline`关键字来指示编译器尝试内联函数,以提高效率。构造函数用于初始化类的对象,而析构函数则在对象生命周期结束时自动调用,用于清理资源。
最后,文件提到了面向对象编程的基本思想,包括对象的外部接口、特定的访问权限、继承与派生,以及函数和类的封装。面向对象编程(OOP)的核心在于将数据和操作数据的方法打包在一起,形成对象,通过对象之间的交互来解决问题。继承允许子类继承父类的属性和行为,派生则可以创建新的类,这些类具有已有的类的一些特征,但又可以添加自己的特性。
总结来说,这个资源涵盖了C++中的类继承、成员覆盖原则、访问控制、结构体与联合的使用,以及面向对象编程的基本概念。这些都是C++程序员需要掌握的关键知识。
2012-08-03 上传
2009-06-05 上传
2022-11-11 上传
2023-04-23 上传
2023-06-02 上传
2024-07-17 上传
2023-10-06 上传
2023-07-13 上传
2024-08-14 上传
Happy破鞋
- 粉丝: 12
- 资源: 2万+
最新资源
- MATLAB实现小波阈值去噪:Visushrink硬软算法对比
- 易语言实现画板图像缩放功能教程
- 大模型推荐系统: 优化算法与模型压缩技术
- Stancy: 静态文件驱动的简单RESTful API与前端框架集成
- 掌握Java全文搜索:深入Apache Lucene开源系统
- 19计应19田超的Python7-1试题整理
- 易语言实现多线程网络时间同步源码解析
- 人工智能大模型学习与实践指南
- 掌握Markdown:从基础到高级技巧解析
- JS-PizzaStore: JS应用程序模拟披萨递送服务
- CAMV开源XML编辑器:编辑、验证、设计及架构工具集
- 医学免疫学情景化自动生成考题系统
- 易语言实现多语言界面编程教程
- MATLAB实现16种回归算法在数据挖掘中的应用
- ***内容构建指南:深入HTML与LaTeX
- Python实现维基百科“历史上的今天”数据抓取教程