面向对象——模块的延续与发展

简介: 面向对象——模块的延续与发展

模块的延续与发展

模块成员的性质和模块的性质

模块累积的角度,一个大模块是由小模块构成的。

构建一个模块有两种方式:小模块架构成为大模块,由另一个模块继承和派生而来

模块可以通过调用模块成员使用模块成员的性质,这就是组合。

代码理解如下:

#include<bits/stdc++.h>
using namespace std;
class point{
    private:
        int x,y;
    public:
        point(int xx,int yy):x(xx),y(yy){}
        void showpoint(){
            cout<<"("<<x<<","<<y<<")"<<endl;
        }
    ~point(){}
};
///小模块组合为大模块
class circle{
    public:
        point p;
        double r;
    public:
        circle(int xx,int yy,double rr);
        double getarea(){return 3.14*r*r;}
        void shouarea(){
            cout<<"S="<<getarea()<<endl;
        }
};
///构造函数
circle::circle(int xx,int yy,double rr):p(xx,yy),r(rr){}
int main(){
    circle c(3,4,5.1);
    c.shouarea();
    (c.p).showpoint();
    return 0;
}

继承意义与派生模块构造

模块除了组合关系,还有继承关系,简要的说就是把父模块的功能性质直接作为自己的功能性质。


如果一个派生模块只继承了一个基类模块,称为单继承;如果一个派生模块继承了多个基类模块作为自己的子成员,这种继承关系成为多继承。


派生类模块的构造是在已有模块的基础上发展起来的,即派生类模块继承了基类模块的接口功能。


派生模块继承了基类模块,也就是说基类模块是派生模块的一部分,在构造派生模块时当然要构造一个基类模块作为他的子成员。


继承关系

通常涉及到以下两点:1.一个基类模块(父模块)是派生模块的一个构造成员


2.基类模块(父模块)的接口成员在子模块里的访问权限问题。


公有继承关系:派生类把继承下来的基类的接口成员也作为自己的对外接口,从外部来看派生类也具有了基类的性质。


语法如下:

class 派生类名 : public 基类名{
    成员说明列表
}

派生类名是指的新构造的模块,基类名是基础模块,派生类是以基类为基础发展形成的;

public表示的是基类的接口被继承到派生模块后将被提升成为派生类的对外接口

成员说明列表指的是派生模块中除了继承模块外新加的成员。

#include<bits/stdc++.h>
using namespace std;
class base{
    private:
        int b_num;
    public:
        ///无参构造函数
        base(){}
        ///有参构造函数
        base(int i):b_num(i){}
        int getbnum(){return b_num;}
        int setnum(int x){b_num=x;}
        void showbnum(){cout<<b_num<<endl;}
        ~base(){}
};
///定义的继承派生关系,没有添加新成员
///公有继承,基类的对外接口继承下来成为派生类的对外接口
class derived:public base{
};
int main(){
    cout<<"测试基类性质"<<endl;
    base b;
    cout<<b.getbnum()<<endl;
    b.setnum(500);
    cout<<b.getbnum()<<endl;
    cout<<"基类base的对象大小为"<<sizeof(b)<<endl;
    cout<<"测试派生类性质"<<endl;
    derived d;
    cout<<d.getbnum()<<endl;
    d.setnum(555);
    cout<<d.getbnum()<<endl;
    cout<<"派生类derived的对象大小为"<<sizeof(d)<<endl;
    return 0;
}

保持原有访问属性,私有还是私有:

#include<bits/stdc++.h>
using namespace std;
class A{
    private: int a;
    public: int puba;
    public:
        void showa(){cout<<a<<endl;}
        int geta(){return a;}
};
class B{
    private: int b;
    public: int pubb;
    public:
        void showb(){cout<<b<<endl;}
        int getb(){return b;}
};
///公有继承下类C有6个接口成员
class C: public A, public B{
};
int main(){
    C e;
    cout<<e.geta()<<endl;
    cout<<e.puba<<endl;
    cout<<e.getb()<<endl;
    cout<<e.getb()<<endl;
    e.showa();
    e.showa();
    return 0;
}
目录
相关文章
|
6月前
|
算法 测试技术 开发者
编程范式之争:面向对象与函数式的较量
在当今软件开发领域,面向对象编程(OOP)和函数式编程(FP)是两种备受瞩目的主流编程范式。本文将比较这两种范式的特点和优势,并探讨如何在实际项目中进行选择。
|
25天前
|
Java
颠覆认知:一向主张可扩展性的Java,为何要推出封闭类?
本文介绍了Java的Sealed Classes(封闭类)功能,探讨了为何Java在强调可扩展性的同时引入这一特性。文章基于JDK 17.0.5,详细解释了Sealed Classes的概念及其作用。通过对比final类和package-private类,阐述了封闭类在提高安全性和控制扩展性方面的优势。最后,通过具体示例展示了如何使用sealed关键字以及相关语法。了解这一新特性有助于我们更好地把握Java未来的发展趋势。
40 2
|
3月前
|
Java 测试技术 API
Java新纪元:模块化设计重塑开发体验,让代码如艺术品般优雅!
【8月更文挑战第30天】Java模块化设计是一种通过将应用程序分解为独立、可重用模块来提高代码可维护性和可扩展性的方法。其核心是自Java 9引入的Java Platform Module System(JPMS)。模块化设计增强了封装性,简化了依赖管理和系统维护,并通过按需加载模块提升了性能。每个模块有明确职责和接口,通过`module-info.java`文件定义。实战示例展示了如何创建和使用模块。最佳实践包括明确模块职责、减少依赖、使用模块描述符及模块化测试,从而构建健壮、可维护的应用程序。
47 2
|
3月前
|
Java 开发者
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
37 7
|
3月前
|
JavaScript 前端开发 安全
TypeScript:编程界的革命宣言,如何用它重塑你的代码王国?
【8月更文挑战第22天】TypeScript是由微软开发的JavaScript超集,自2012年发布以来,通过引入类型安全与面向对象编程特性,极大地提升了开发效率与代码可靠性。它允许开发者在编译阶段捕获错误,支持接口与类定义,具备高级类型如联合与交叉类型,并且拥有枚举、装饰器等功能。此外,TypeScript的模块系统便于大型项目的组织与管理,结合异步编程支持,使得复杂应用开发更加简洁明了。
26 1
|
3月前
|
开发者 Python
Python 模块化方式编程:在编程热潮中找到归属感,让代码更具魅力与活力
【8月更文挑战第22天】Python 以其简洁强大备受青睐。模块化编程将大型程序拆分成独立模块,每个负责特定功能,简化代码结构,提升可读性和维护性。通过创建如“math_utils.py”这样的文件来定义数学运算函数,可在其他文件中轻松导入使用。这种方式提高了代码的可重用性,便于管理和更新。在项目开发中按功能划分模块,如用户、商品和订单管理等,有助于保持清晰的代码结构和减少依赖复杂度。遵循良好的命名规范,可以使模块更易理解与使用。
37 0
|
5月前
|
Java 数据安全/隐私保护
Java 封装:打破传统,创新你的编程思维!
【6月更文挑战第16天】Java中的封装是将数据和操作数据的方法封装在类中,隐藏内部细节,通过公共接口交互。这样保证了数据安全,降低了耦合度,便于验证(如`Shape`类中构造函数的类型检查)和控制(如`setType`方法中添加额外操作)。封装使代码更清晰、可维护,鼓励创新编程思维。
41 11
|
5月前
|
存储 数据可视化 测试技术
了解面向对象方法发展历程
【6月更文挑战第26天】本文介绍了几个面向对象发展中出现的典型方法。**Coad/Yourdon方法** **Booch方法** **OMT** **OOSE**。这四种方法都贡献于现代面向对象软件开发的。
108 0
了解面向对象方法发展历程
|
6月前
|
C++ 算法 Rust
从C++看编程语言发展脉络
【5月更文挑战第1天】自1979年以来C++历经40年发展,以其复杂语法影响了Go、Rust和Zig等语言。 回顾C++11,引入了范围for循环、Lambda表达式、自动类型推导、统一初始化、删除和默认函数、nullptr、委托构造器、右值引用、新标准库如线程支持及算法等。C++持续演进,保持其在编程语言中的影响力。
110 0
从C++看编程语言发展脉络
|
6月前
|
C语言 开发者 Python
编程语言之问:何时该借用,何时该创造?
编程语言之问:何时该借用,何时该创造?
61 1