C++面向对象基础,以及一些常见面试 改错题。
来源:互联网 发布:linux装php环境 编辑:程序博客网 时间:2024/05/18 04:55
1、带默认参数的构造函数. (实际中避免用)
会有歧义!
class A{public:A(int i=10, int j=11, int k=12);A(int ,int);int i,j,k;};A::A(int a, int b,int c){i = a;j = b;k = c;}A::A(int i,int j){this->i = i;this->j = j;this->k = 100;}int main(){A a;A a2(20);A a3(30,40);//错误 ambiguous call to overloaded function return 0;}
2、指向对象成员函数的指针
重温下普通函数的指针变量:
int ( * p ) ( int , int );
定义分为三部分:函数类型 ( * 函数指针变量) (参数类型1,参数类型2,……)
void fun(){cout << "这是fun()" << endl;}int main(){void (* p) (); //p是指向void型函数的指针变量p = fun; //将fun函数的入口地址赋给指针变量p,p就是指向了函数fun(*p)(); //调用fun函数。return 0;}
而定义一个指向 对象成员函数 的指针变量比较复杂一些。
直接这样写有错误!
class Test{private:int num;public:void getNum(){cout << num << endl;}void setNum(int num){this->num = num;}};int main(){Test t;t.setNum(10);void (* p) (); //p是指向void型函数的指针变量p = t.getNum; //错误! error C2440: '=' : cannot convert from 'void (__thiscall Test::*)(void)' to 'void (__cdecl *)(void)' return 0;}
原因:
成员函数与普通函数有一个最根本的区别:它是类中的一个成员。编译系统要求在上面的复制语句中,指针变量的类型必须与赋值号右侧函数的类型相匹配。
在以下三个方面都要匹配:
1) 函数参数的类型 和 参数个数。
2) 函数返回值的类型
3) 所属的类。
第3)点不匹配!应该采用以下的方式:
这种写法确实很蛋疼! 知道为什么java那么火了,从java转C++的伤不起啊
int main(){Test t;t.setNum(10);//void (* p) (); //p是指向void型函数的指针变量void (Test:: * p) ();p = &Test::getNum; // 定义指向Test类公有成员函数(t.*p)(); // 调用p指向 Test类公有成员函数 getNum();return 0; }
- C++面向对象基础,以及一些常见面试 改错题。
- (面试)C语言指针程序改错题
- 面试 改错题-1
- 面试 改错题-2
- 【C#】面向对象基础
- C语言面试基础题以及答案
- 面向对象以及基础总结
- 一些常见的Android面试基础题总结
- 【C++】改错题总结
- Objective-C 面向对象基础
- Object-C 面向对象基础
- Android面试-Java基础-面向对象
- ios学习一:objective-c面向对象的一些术语(来源objective-c基础编程)
- 什么是面向对象以及UML基础
- <菜鸟上路>java基础以及面向对象
- PHP面向对象的一些基础概述
- 数据库基础(面试常见题)
- 面试常见基础题整理
- android源码下加入替换铃声文件,及设置默认铃声
- CMFCToolBar插入组合框
- .net framework3.5安装失败win7_64位
- Struts2得到Request和Session
- 深入了解宏
- C++面向对象基础,以及一些常见面试 改错题。
- ACM/ICPC 2012 天津 B题
- 杂记之TCP/IP协议簇
- HTTP协议是无状态协议,怎么理解?
- Nginx日志监控(包括可视化)工具
- Google C++ Style Guide 的Header File 部分 翻译
- Sparse Table算法
- SQL脚本书写注意事项—性能分析(一)
- 如何在C++中使用GDI+