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

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

模块的延续与发展

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

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

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

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

代码理解如下:

#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;
}
目录
相关文章
|
5月前
|
存储 编译器 程序员
汽车电子行业的 C 语言编程标准
汽车电子行业的 C 语言编程标准
148 0
汽车电子行业的 C 语言编程标准
|
5月前
|
算法 测试技术 开发者
编程范式之争:面向对象与函数式的较量
在当今软件开发领域,面向对象编程(OOP)和函数式编程(FP)是两种备受瞩目的主流编程范式。本文将比较这两种范式的特点和优势,并探讨如何在实际项目中进行选择。
|
5月前
|
存储 Python
揭秘python函数:编程艺术的核心力量(2)
揭秘python函数:编程艺术的核心力量(2)
|
5月前
|
小程序 开发者 Python
揭秘python函数:编程艺术的核心力量
揭秘python函数:编程艺术的核心力量
|
11月前
|
安全 编译器 Linux
全面解析C++11新特性:现代编程的新起点(下)
全面解析C++11新特性:现代编程的新起点
|
2月前
|
Java 开发者
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
35 7
|
2月前
|
Rust 开发者
揭秘Rust编程:模块与包的终极对决,谁将主宰代码组织的新秩序?
【8月更文挑战第31天】在软件工程中,模块化设计能显著提升代码的可读性、可维护性和可重用性。Rust 作为现代系统编程语言,其模块和包管理机制为开发者提供了强有力的工具来组织代码。本文通过对比模块和包的概念及使用场景,探讨了 Rust 中的最佳实践。
17 2
|
4月前
|
存储 数据可视化 测试技术
了解面向对象方法发展历程
【6月更文挑战第26天】本文介绍了几个面向对象发展中出现的典型方法。**Coad/Yourdon方法** **Booch方法** **OMT** **OOSE**。这四种方法都贡献于现代面向对象软件开发的。
62 0
了解面向对象方法发展历程
|
4月前
|
开发者
代码复用的艺术:组件与库的力量
【6月更文挑战第20天】代码复用提升效率,组件和库是关键。组件,独立部署的软件单元,封装功能,降低系统复杂度。库,预编代码集合,提供通用功能。复用带来高效开发,减少错误,促进团队协作,降低维护成本。选择合适组件库,遵循设计原则,合理使用,编写可复用代码,实现软件开发的最佳实践。
|
11月前
|
安全 编译器 程序员
全面解析C++11新特性:现代编程的新起点(上)
全面解析C++11新特性:现代编程的新起点
全面解析C++11新特性:现代编程的新起点(上)