P4:C++函数重载

函数重载的概念

C++允许在同一个作用域中存在同名函数

这些同名函数的形式参数的列表不同:参数的个数、参数的类型、类型的顺序

同名函数通常用于处理功能类似但是数据类型不同的问题

函数重载的三种情况

参数的个数不同

#include<iostream>
using namespace std;

//参数个数不同
void f()
{
    cout << "f()" << endl;
}

void f(int a)
{
    cout << "f(int a)" << endl;
}

参数的类型不同

#include<iostream>
using namespace std;

//参数类型不同
int Add(int left, int right)
{
    cout << "int Add(int left, int right)" << endl;
    return left + right;
}

double Add(double left, double right)
{
    cout << "double Add(double left, double right)" << endl;
    return left + right;
}

类型的顺序不同

#include<iostream>
using namespace std;

//参数类型顺序不同 
void f(int a, char b)
{
    cout << "f(int a,char b)" << endl;
}

void f(char a, int b)
{
    cout << "f(char a, int b)" << endl;
}

函数重载的原理:名字修饰

此处原理有些复杂,不再赘述

总结:
        1.C/C++程序运行起来,需要经历4个阶段:预处理、编译、汇编、链接

        2.C语言无法支持函数重载,因为它无法区分同名函数;而C++可以通过函数修饰规则区分,从而支持重载

        3.返回值不同无法构成重载,编译器不支持区分

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个可能的实现: ```cpp #include <iostream> using namespace std; class Person { private: char* name; int age; char gender; public: // 构造函数重载 Person() { name = new char[10]; strcpy(name, "Unknown"); age = 0; gender = ' '; } Person(char* n, int a, char g) { name = new char[strlen(n) + 1]; strcpy(name, n); age = a; gender = g; } Person(char* n, int a) { name = new char[strlen(n) + 1]; strcpy(name, n); age = a; gender = ' '; } // 带有默认参数的构造函数重载 Person(char* n = "Unknown", int a = 0, char g = ' ') { name = new char[strlen(n) + 1]; strcpy(name, n); age = a; gender = g; } // 析构函数 ~Person() { delete[] name; } // 输出对象的数据成员 void printInfo() { cout << "Name: " << name << endl; cout << "Age: " << age << endl; cout << "Gender: " << gender << endl; } }; // 类外函数,输出对象的数据成员 void printPersonInfo(Person p) { cout << "Name: " << p.name << endl; cout << "Age: " << p.age << endl; cout << "Gender: " << p.gender << endl; } int main() { // 使用不同的构造函数重载初始化对象 Person p1; Person p2("John", 20, 'M'); Person p3("Alice", 18); Person p4("Bob"); // 调用不同的输出函数,输出对象的数据成员 p1.printInfo(); p2.printInfo(); p3.printInfo(); p4.printInfo(); // 调用类外函数,输出对象的数据成员 printPersonInfo(p1); printPersonInfo(p2); printPersonInfo(p3); printPersonInfo(p4); return 0; } ``` 输出结果为: ``` Name: Unknown Age: 0 Gender: Name: John Age: 20 Gender: M Name: Alice Age: 18 Gender: Name: Bob Age: 0 Gender: Name: Unknown Age: 0 Gender: Name: John Age: 20 Gender: M Name: Alice Age: 18 Gender: Name: Bob Age: 0 Gender: ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值