依赖倒置c语言,c++依赖倒置

发布时间:2022-12-01

本文目录一览:

  1. 一维数组元素的倒置操作,用C语言写。
  2. C语言如何实现数组元素倒置??
  3. 里氏替换原则与依赖倒置原则有什么区别
  4. 用c语言实现数组倒置

一维数组元素的倒置操作,用C语言写。

void reverse(int p[], int n)
{
    int *q, t;
    for(q = p + n - 1; p < q; ++p, --q)
    {
        t = *p;
        *p = *q;
        *q = t;
    }
}

C语言如何实现数组元素倒置??

  1. 打开c语言编辑器,新建一个空白的文件:
  2. 这里可以开始写代码了,主函数的前面定义了数组和一些变量,倒置操作在for循环中完成,这里只需要第一个元素和最后一个元素交换、第二个元素和倒数第二个元素交换、以此类推……不管数组元素的个数是奇数还是偶数,这个算法都是成立的,最后则是打印输出结果:
  3. 最后程序编写完成需要验证一下结果,按下crtl+F5运行程序,弹出的窗口中就能看见逆序输出的数组元素了:

里氏替换原则与依赖倒置原则有什么区别

区别:

  • 定义不同:里氏替换原则是关于子类与父类的原则;依赖倒置原则是关于抽象与细节的原则。
  • 应用范围不同:依赖倒置原则的应用范围比里氏替换原则更广泛。
  • 涉及的对象关系不同:里氏替换原则中的子类具有自己的独立性;依赖倒置原则中的细节依赖于抽象。

衍生知识点:

一、里氏替换原则

定义1:如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型T2是类型T1的子类型。 定义2:所有引用基类的地方必须能透明地使用其子类的对象。 通俗来讲:子类可以扩展父类的功能,但不能改变父类原有的功能。是OCP的扩展。它包含以下四层含义:

  1. 子类可以实现父类的抽象,但不能覆盖父类的非抽象方法
  2. 子类中可以增加自己特有的方法
  3. 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入更宽松
  4. 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类的更严格

二、依赖倒置原则

定义:高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。 问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。 解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B和类C发生联系,则会大大降低修改类A的几率。 核心思想:面向接口编程。含有下面3点:

  1. 低层模块尽量都要有抽象类或接口,或者两者都有
  2. 变量的声明类型尽量使抽象类或接口
  3. 用继承时遵循里氏替换原则

用c语言实现数组倒置

#include <stdio.h>
void invert(int x[], int n);
void main()
{
    int i, *p, a[10] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
    printf("%s\n", "元素倒置前:");
    for(p = a; p < a + 10;) printf("%d ", *(p)++);
    printf("\n");
    p = a;
    invert(p, 10);
    printf("%s\n", "元素倒置后:");
    for(p = a; p < a + 10;) printf("%d ", *(p)++);
    printf("\n");
}
void invert(int x[], int n)
{
    int temp, i, j, m = (n - 1) / 2;
    for (i = 0; i <= m; i++)
    {
        j = n - 1 - i;
        temp = x[i]; x[i] = x[j]; x[j] = temp;
    }
}