C++对C的加强 总结(4)
来源:互联网 发布:大数据探索性分析 编辑:程序博客网 时间:2024/05/01 17:23
函数重载
用同一个函数名定义不同的函数
当函数名和不同的参数搭配时函数的含义不同
函数重载至少满足下面的一个条件:
参数个数不同
参数类型不同
参数顺序不同
*/
//当函数默认参数遇上函数重载会发生什么
/*
int func(int a, int b, int c = 0)
{
return a * b * c;
}
int func(int a, int b)
{
return a + b;
}
int main()
{
int c = 0;
c = func(1, 2); // 存在二义性,调用失败,编译不能通过
printf("c = %d\n", c);
printf("Press enter to continue ...");
getchar();
return 0;
}
*/
/*
编译器调用重载函数的准则
将所有同名函数作为候选者
尝试寻找可行的候选函数
精确匹配实参
通过默认参数能够匹配实参
通过默认类型转换匹配实参
匹配失败
最终寻找到的可行候选函数不唯一,则出现二义性,编译失败。
无法匹配所有候选者,函数未定义,编译失败。
*/
/*
函数重载的注意事项
重载函数在本质上是相互独立的不同函数(静态链编)
重载函数的函数类型是不同的
函数返回值不能作为函数重载的依据
函数重载是由函数名和参数列表决定的。
*/
//重载和函数指针结合
/*
函数重载与函数指针
当使用重载函数名对函数指针进行赋值时
根据重载规则挑选与函数指针参数列表一致的候选者
严格匹配候选者的函数类型与函数指针的函数类型
*/
/*
int func(int x) // int(int a)
{
return x;
}
int func(int a, int b)
{
return a + b;
}
int func(const char* s)
{
return strlen(s);
}
typedef int(*PFUNC)(int a); // int(int a)
int main(int argc, char *argv[])
{
int c = 0;
PFUNC p = func;
c = p(1);
printf("c = %d\n", c);
printf("Press enter to continue ...");
getchar();
return 0;
}
*/
函数重载与函数指针
当使用重载函数名对函数指针进行赋值时
根据重载规则挑选与函数指针参数列表一致的候选者
严格匹配候选者的函数类型与函数指针的函数类型
面向过程编程到面向对象编程训练
#include "iostream"
using namespace std;
//目标:抽象立方体 求立方体的s 和 v
class Cube
{
public:
void setA(int a)
{
m_a = a;
}
int getA()
{
return m_a;
}
void setB(int a)
{
m_a = a;
}
int getB()
{
return m_b;
}
void setC(int a)
{
m_a = a;
}
int getC()
{
return m_c;
}
void setABC(int a=0, int b=0, int c=0)
{
m_a = a;
m_b = b;
m_c = c;
}
public:
int getS()
{
m_s = 2*(m_a*m_b + m_a*m_c + m_b*m_c);
return m_s;
}
int getV()
{
m_v = m_a*m_b*m_c;
return m_v;
}
public:
char * cubeEqueal(Cube &c1, Cube &c2)
{
if (c1.getA()== c2.getA() &&
c1.getB()== c2.getB() &&
c1.getC()== c2.getC())
{
return "相等";
}
return "不相等";
}
char * cubeEqueal(Cube &c2)
{
if (m_a== c2.getA() &&
m_b== c2.getB() &&
m_c== c2.getC())
{
return "相等";
}
return "不相等";
}
private:
int m_a;
int m_b;
int m_c;
int m_v;
int m_s;
};
void main34()
{
Cube cube1, cube2, cube3;
cube1.setABC(1, 2, 3);
cube2.setABC(2, 3, 4);
cube3.setABC(1, 2, 3);
//cout<<cube1.cubeEqueal(cube1, cube2);
cout<<cube1.cubeEqueal(cube2);
cout<<cube1.cubeEqueal(cube1);
//cout<<cubeEqueal(cube1, cube2)<<endl;
//cout<<cubeEqueal(cube1, cube3)<<endl;
system("pause");
}
void main31()
{
Cube cube1;
cube1.setABC(1, 2, 3);
cube1.getV();
cube1.getS();
cout<<"体积为:"<<cube1.getV()<<"面积为"<<cube1.getS();
system("pause");
}
//全局函数
char * cubeEqueal(Cube &c1, Cube &c2)
{
if (c1.getA()== c2.getA() &&
c1.getB()== c2.getB() &&
c1.getC()== c2.getC())
{
return "相等";
}
return "不相等";
}
void main33()
{
Cube cube1, cube2, cube3;
cube1.setABC(1, 2, 3);
cube2.setABC(2, 3, 4);
cube3.setABC(1, 2, 3);
cout<<cubeEqueal(cube1, cube2)<<endl;
cout<<cubeEqueal(cube1, cube3)<<endl;
system("pause");
}
- C++对C的加强 总结(4)
- C++对C的加强 总结(1)
- C++对C的加强 总结(2)
- C++对C的加强 总结(3)
- C++对C的加强 总结(5)
- C++对C的加强
- C++对C的加强
- C++对C语言的加强
- 【C++】基础知识—对C语言的加强
- 【C++基础03】C++对C的加强
- C++对C的一些加强和变化
- C++对C加强专题总结:namespace,register,bool,三目运算符,类型检测,struct
- c++对于c的加强
- 【C/C++】C++对C的扩展总结
- C#-基础加强(1)
- C#-基础加强(2)
- 对十四天的c学习的总结
- 对C语言指针的总结
- 【高手回避】poj3268,一道很水的dijkstra算法题
- jquery-uploadify3.2使用心得
- 优化MyEclipse 8.6.1的启动速度与运行速度
- test
- OpenCV 中 Kmeans 用法整理
- C++对C的加强 总结(4)
- 史上最通俗易懂的关于JavaScript 的 prototype、原型继承、this指针的讲解
- POJ 3278 Catch That Cow(图论:BFS)
- 如何在myeclipse中取消鼠标覆盖提示功能?
- Ubuntu14.04下maven建立java项目
- ADSTATS.SQL HANG AT DBMS_STATS.GATHER_SCHEMA_STATS. (文档 ID 466294.1)
- C++对C的加强 总结(5)
- 【存储管理】系统调用mmap()
- iPhone-获取网络数据或者路径的文件名以及后缀