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

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

模块的延续与发展

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

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

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

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

代码理解如下:

#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月前
|
存储 Python
揭秘python函数:编程艺术的核心力量(2)
揭秘python函数:编程艺术的核心力量(2)
|
6月前
|
小程序 开发者 Python
揭秘python函数:编程艺术的核心力量
揭秘python函数:编程艺术的核心力量
|
1月前
什么是业务? 编程语言范畴中谈到的业务是什么
本文阐述了在编程语言范畴中,业务指的是公司或产品解决一系列问题的过程,技术只是完成业务的手段,同时强调了在实际开发过程中需要结合业务场景进行技术上的调整。
49 1
什么是业务? 编程语言范畴中谈到的业务是什么
|
1月前
|
Java
颠覆认知:一向主张可扩展性的Java,为何要推出封闭类?
本文介绍了Java的Sealed Classes(封闭类)功能,探讨了为何Java在强调可扩展性的同时引入这一特性。文章基于JDK 17.0.5,详细解释了Sealed Classes的概念及其作用。通过对比final类和package-private类,阐述了封闭类在提高安全性和控制扩展性方面的优势。最后,通过具体示例展示了如何使用sealed关键字以及相关语法。了解这一新特性有助于我们更好地把握Java未来的发展趋势。
52 2
|
3月前
|
Java 开发者
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
42 7
|
4天前
|
人工智能 数据处理 C++
《跨越语言壁垒:Python 人工智能原型到 C++可执行程序的转型之路》
在AI领域,Python因简便和丰富的库被广泛用于原型开发,但在高性能需求下,C++更胜一筹。本文探讨了将Python原型转换为C++程序的方法,包括代码分析、选择转换工具、数据类型匹配、内存管理及优化策略,强调了两者互补的重要性,旨在提升AI应用的性能与可靠性。
|
3月前
|
Rust 开发者
揭秘Rust编程:模块与包的终极对决,谁将主宰代码组织的新秩序?
【8月更文挑战第31天】在软件工程中,模块化设计能显著提升代码的可读性、可维护性和可重用性。Rust 作为现代系统编程语言,其模块和包管理机制为开发者提供了强有力的工具来组织代码。本文通过对比模块和包的概念及使用场景,探讨了 Rust 中的最佳实践。
36 2
|
3月前
|
JavaScript 前端开发 安全
TypeScript:编程界的革命宣言,如何用它重塑你的代码王国?
【8月更文挑战第22天】TypeScript是由微软开发的JavaScript超集,自2012年发布以来,通过引入类型安全与面向对象编程特性,极大地提升了开发效率与代码可靠性。它允许开发者在编译阶段捕获错误,支持接口与类定义,具备高级类型如联合与交叉类型,并且拥有枚举、装饰器等功能。此外,TypeScript的模块系统便于大型项目的组织与管理,结合异步编程支持,使得复杂应用开发更加简洁明了。
28 1
|
3月前
|
开发者 Python
Python 模块化方式编程:在编程热潮中找到归属感,让代码更具魅力与活力
【8月更文挑战第22天】Python 以其简洁强大备受青睐。模块化编程将大型程序拆分成独立模块,每个负责特定功能,简化代码结构,提升可读性和维护性。通过创建如“math_utils.py”这样的文件来定义数学运算函数,可在其他文件中轻松导入使用。这种方式提高了代码的可重用性,便于管理和更新。在项目开发中按功能划分模块,如用户、商品和订单管理等,有助于保持清晰的代码结构和减少依赖复杂度。遵循良好的命名规范,可以使模块更易理解与使用。
44 0
|
5月前
|
Java 数据安全/隐私保护
Java 封装:打破传统,创新你的编程思维!
【6月更文挑战第16天】Java中的封装是将数据和操作数据的方法封装在类中,隐藏内部细节,通过公共接口交互。这样保证了数据安全,降低了耦合度,便于验证(如`Shape`类中构造函数的类型检查)和控制(如`setType`方法中添加额外操作)。封装使代码更清晰、可维护,鼓励创新编程思维。
45 11
下一篇
无影云桌面