重定义

C++中的重定义指在同一作用域内定义了同名的函数、变量或类型。重定义是编译器无法处理的语法错误,将导致程序无法编译通过。

例如,在同一作用域内定义了两个函数名相同、参数列表相同的函数,就会产生重定义错误。如下是一个示例:

C++中的重定义指在同一作用域内定义了同名的函数、变量或类型。重定义是编译器无法处理的语法错误,将导致程序无法编译通过。例如,在同一作用域内定义了两个函数名相同、参数列表相同的函数,就会产生重定义错误。如下是一个示例:```
int add(int a, int b) {return a + b;
}int add(int x, int y) { // 重定义return x + y;
}int main() {int sum = add(1, 2);return 0;
}
```上述代码中,定义了两个同名同参数的函数`add`,编译器将无法区分它们,就会产生重定义错误。解决方法是修改其中一个函数名或参数列表。

上述代码中,定义了两个同名同参数的函数`add`,编译器将无法区分它们,就会产生重定义错误。解决方法是修改其中一个函数名或参数列表。

当重定义和重载重写一起被问到的时候,多数指的是,子类中有一个成员变量或成员方法和父类中的成员变量或成员方法名称相同,且父类中成员函数不是虚函数的情况,此时子类的成员变量或成员方法会将父类的成员变量或方法给隐藏起来,实际父类的成员和成员方法在子类中依然存在只是被隐藏了,使用父类的作用域运算符依然可以调用。

(另外一提,如果全局变量被局部变量重定义给隐藏了,此时全局变量处于匿名作用域空间中,即使用::即可进行调用)

重载

C++中的重载(overloading)是指在同一个作用域内声明多个同名函数或运算符,但它们的形参列表不同,可以根据传入的参数类型和数量来自动调用不同的函数或运算符。重载的目的是提高程序的灵活性和可读性。

重载函数的形参列表必须不同,可以通过以下方式进行区分:

1. 参数数量不同
2. 参数类型不同
3. 参数顺序不同

例如,下面是三个重载函数,它们都有相同的名字`sum`,但是它们的参数列表不同:

int sum(int a, int b);
double sum(double a, double b);
int sum(int a, int b, int c);

当调用sum函数时,编译器会自动根据传入的参数类型和数量选择正确的函数进行调用。例如:

int result1 = sum(2, 3); // 调用int sum(int a, int b);
double result2 = sum(2.5, 3.5); // 调用double sum(double a, double b);
int result3 = sum(2, 3, 4); // 调用int sum(int a, int b, int c);

总之,重载为使用者提供了更加便利的操作方式,提高了代码的可读性和可维护性。

c++中形参为引用和非引用时不属于重载,形参为常引用和引用时是重载,普通指针和常量指针也属于重载,常指针和指针常量也属于重载,使用typededef定义的类型也不属于重载。

c++中提供了运算符重载

运算符重载是指在程序中自定义运算符的行为,使其可以用于自定义类型的对象。在C++中,可以重载多种运算符,例如算术运算符(+、-、*、/)、关系运算符(<、>、<=、>=、==、!=)、逻辑运算符(&&、||、!)、位运算符(&、|、^、~、<<、>>)等。

返回类型 operator 运算符(参数列表){// 运算符的操作return 返回值;
}

其中,operator是关键字,运算符可以是已有的运算符,也可以是自定义的运算符。参数列表可以是零个或多个参数,返回值可以是任意数据类型(包括自定义的类型)。

例如,我们可以重载+运算符,使得两个自定义类型对象可以直接相加:

class MyInt {
private:int num;
public:MyInt(int n = 0) : num(n) {}MyInt operator+(const MyInt& other) {return MyInt(num + other.num);}
};int main() {MyInt a(3), b(4);MyInt c = a + b; // 相当于 c = a.operator+(b)cout << c << endl; // 输出 7return 0;
}

重写

C++重写是指对已有的C++代码进行重构和优化,以提高其性能和可维护性,同时保持原有功能不变的过程。

C++重写一般涉及以下步骤:

1. 对原有代码进行分析和评估,确定需要重写的模块或部分。

2. 设计新的代码架构,考虑如何改进代码的性能、可读性、可扩展性等方面,并确定使用的数据结构、算法和设计模式。

3. 重新编写代码,注意代码风格、命名规范、注释等方面的标准化。

4. 进行单元测试,确保新代码能够正确地运行,并与原有代码进行对比测试,确保重写后的代码性能和功能都得到了改进。

5. 对新代码进行集成测试和系统测试,确保新代码能够与其他模块或系统协同工作,并且没有新的错误或问题。

6. 将新代码部署到生产环境,并对用户和其他利益相关者进行演示和培训。

C++重写虽然比较耗费时间和精力,但可以极大地提高代码质量和性能,使得系统更加健壮和高效。

通俗易懂的来说,c++中的重写,即派生类继承了基类之后,基类中的虚函数,可以在派生类中重写,要求函数名,函数列表,函数返回值都相同,因为虚函数是存于类对象内存中的虚拟函数表内的,未重写时,派生类的虚函数表中即为基类中的虚函数,当重写发生后,派生类的虚拟函数表中存储的即是重写后本类中的函数,因此,重写之后会有覆盖现象,即派生类的方法覆盖了基类的方法,此时通过派生类就无法使用基类中的该方法了。

C++中重定义,重载,重写相关推荐

  1. Qt中重定义的解决方案

    利用Qt Creator开发时可能会遇到明明只是定义一次的变量或函数,偏偏报错重定义了! 可能原因: 1. 变量真正重定义了 2. 文件重复包含 3. 自己手动删除了旧文件,使用新文件替换了,但是pr ...

  2. C语言中重定义 错误

    假设有三个文件 node.h //定义节点 list.h //对链表的操作函数 test.c //测试函数 包含关系如下: list.h中 #include "node.h" te ...

  3. 关于C++中重定义:不同类型的基类型问题

    在程序里并未在别处声明此结构体但是一直报错,错误如下: 解决办法:在有这些结构体的.CPP或者.h文件头,也就是#include的前面加上#pragma once,就ok了

  4. 第九天2017/04/18(3、重载/覆盖 PK 重写/重定义、父类子类混搭风、抽象类)

    1.重载/覆盖 PK 重写/重定义 [预备知识] 函数重载必须在同一个类中发生子类无法重载父类的函数,父类同名的函数将会被名称覆盖重载是在编译期间根据参数类型和个数决定函数调用重载只放在同一个类之中, ...

  5. ORACLE 普通表转换成分区表(在线重定义)

    在一个高可用系统中,如果需要改变一个表的定义是一件比较棘手的问题,尤其是对于7×24系统.Oracle提供的基本语法基本可以满足一般性修改,但是对于把普通堆表改为分区表,把索引组织表修改为堆表等操作就 ...

  6. C++中的覆盖(重写)、重载、隐藏(重定义)、多态!

    例一: 首先声明Base类型的指针指向实际类型为Derived的对象,先调用基类构造函数,再调用派生类构造函数.输出Base, Derived. base->echo(); 指针是base类型, ...

  7. c++中的多态---1(多态概念,静态联编和动态联编,多态原理解析,重载,重写,重定义的对比)

    多态的基本概念 多态是面向对象设计语言数据抽象和继承之外的第三个基本特征 多态性(polymorphism)提供接口与具体实现之间的另一层隔膜,从而将"what"和"ho ...

  8. C++中的重载丶重写丶重定义丶重定向的区别

    C++中的重载丶重写丶重定义丶重定向的区别 分类: C.C++丶C#语言基础2013-05-02 05:43 404人阅读 评论(0) 收藏 举报 C++C重定义重定向重载 先看重载: 重载指的是函数 ...

  9. C++中函数的重载,重写,重定义

    C++中函数的重载,重写,重定义 函数重载 函数重写 函数重定义 函数重载 是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关 ...

最新文章

  1. numpy 数组和矩阵的乘法
  2. Linux系统基础.作业
  3. MyBatis 实践
  4. 工作107:静态路由
  5. python清空集合_python集合删除多种方法详解
  6. 读书笔记--Head First C#目录
  7. linux挂载硬盘_Linux把内存挂载成硬盘提高读写速度-内存虚拟盘
  8. 天勤数据结构顺序表算法操作含完整测试
  9. 弹性力学经典解法与有限元法的不同特点
  10. 全民K歌神器,这款麦克风唱享高音质体验
  11. Wechall Challenges Writeup 知识拓展
  12. Virtual Box 打开.vmdk文件
  13. “异军突起”的蔷薇灵动或成云安全领域“独角兽”?
  14. 国学大师林语堂献宝:英文学习八要诀
  15. Git分布式版本控制系统简介和使用
  16. hover父元素,不希望子元素消失(子元素盒子在下方展开,但鼠标移到子元素时盒子却消失了)
  17. 西北工业大学计算机学院王鹏,王鹏的个人主页-西北工业大学教师个人主页
  18. # 我的家乡--永平风景
  19. 什么是网站可访问性?
  20. Web前端小白了解这些学习秘诀,你也能成为大神!

热门文章

  1. Laplace Smoothing
  2. Multiple Incomplete Views Clustering via Weighted Nonnegative Matrix Factorization with L2;1 Regular
  3. realm java_手把手带你解决Realm-java的编译问题
  4. Smart-tools 免费的开发工具箱
  5. java线程安全的容器类
  6. web图书销售管理系统_JSP+Struts2+JDBC+Mysql实现的校园宿舍管理系统
  7. http 状态码 301 302 303 区别
  8. layui 编辑页面没有等父页面值传入就渲染完了,导致父页面数据没有传入子页面
  9. sas统计分析学习笔记(一)
  10. 教您用EasyRecovery16快速下载安装及使用恢复数据方法