C++面试笔记_1
来源:互联网 发布:秦美人翅膀进阶数据 编辑:程序博客网 时间:2024/06/04 17:56
VC6.0中写模板类将template定义和实现写在一个文件中,不然编译有问题,但是简单模板函数的话分开写可能没问题,在.h最后include .cpp文件
template<class T, int maxSize = 100> class stack // 带参数的模板类定义,maxSize默认100{ public: stack(); ~stack(); void push(T t); T pop(); bool isEmpty(); private: int m_maxSize; int m_size; T *m_pT;};template <class T, int maxSize> stack<T, maxSize>::stack(){ m_maxSize = maxSize; m_size = 0; m_pT = new T[m_maxSize];}
main中进行调用的时候,注意使用点语法调用成员函数,函数的括号不能丢
string模板
include <string>
调用cout或者printf不能直接输出,需要使用方法c_str()转换为字符串
VC6 模板特化!!!
不支持模板的部分特化!!
对swap函数做vector部分的模板特化,但是vector只能做特种类型的模板特化,但是做typename通用模板特化的时候就会编译出错
template<class T> void func_swap(T &a, T &b){ T tempT; tempT = a; a = b; b = tempT;}template<class V> void func_swap(std::vector<V>&a, std::vector<V>&b){ a.swap(b);}
报错:template_1.cpp
C:\Users\Administrator\Desktop\MyCode\template_1.cpp(25) : error C2667: 'func_swap' :
none of 2 overload have a best conversion
C:\Users\Administrator\Desktop\MyCode\template_1.cpp(25) : error C2668: 'func_swap' :
ambiguous call to overloaded function
解决方案:
不写class V,或者改变函数名为func_swap2
定义构造函数和析构函数class test
{
public:
test()
{}
~test()
{}
private:
注意格式
public成员函数可以调用private成员函数,同一个类中可以,但是外部不能调用private成员函数
析构函数必须是public,直接定义类的实例会报错,但是用new不会报错,但是不会被析构
函数重载和重写:
在同一可访问区内被声名的几个具有不同参数列的(参数的类型、个数、顺序不同)同名函数,程序会根据不同的参数列来确定
具体调用哪个函数,这种机制叫重载,重载不关心函数的返回值类型。
① double calculate(double);
② double calculate(double,double);
③ double calculate(double, int);
④ double calculate(int, double);
⑤ double calculate(int);
⑥ float calculate(float);
⑦ float calculate(double);
② double calculate(double,double);
③ double calculate(double, int);
④ double calculate(int, double);
⑤ double calculate(int);
⑥ float calculate(float);
⑦ float calculate(double);
六个同名函数calculate,①②③④⑤⑥中任两个均构成重载,⑥和⑦也能构成重载,而①和⑦却不能构成重载,因为①和⑦的参数相同。
覆盖是指派生类中存在重新定义的函数,其函数名、参数列、返回值类型必须同父类中的相对应被覆盖的函数严格一致,覆盖函数和被覆盖函数只有函数体(花括号中的部分)不同,当派生类对象调用子类中该同名函数时会自动调用子类中的覆盖版本,
而不是父类中的被覆盖函数版本,这种机制就叫做覆盖。(由虚函数引起的)
成员函数被重载的特征有:
1) 相同的范围(在同一个类中);
2) 函数名字相同;
3) 参数不同;
4) virtual关键字可有可无。
覆盖的特征有:
1) 不同的范围(分别位于派生类与基类);
2) 函数名字相同;
3) 参数相同;
1) 相同的范围(在同一个类中);
2) 函数名字相同;
3) 参数不同;
4) virtual关键字可有可无。
覆盖的特征有:
1) 不同的范围(分别位于派生类与基类);
2) 函数名字相同;
3) 参数相同;
4) 基类函数必须有virtual关键字。
在以下四种情况会产生默认拷贝构造函数
1:类的成员类对象有拷贝构造函数
2:类继承的基类含有拷贝构造函数
3:类含有虚函数
4:类继承于虚基类
1 0
- C++面试笔记_1
- C 笔记_1
- The C programming language 笔记_1
- c语言学习笔记_1概论
- HeadFirstC笔记_1.C语言入门
- c++_1
- 笔记_1
- 面试信息获取_1
- 嵌入式面试试题_1
- 面试:数组:Topk _1
- c++Primer学习笔记之二:c++快速入门_1
- 面试_每天一道_1
- C规范_1
- [C++_7]继承_1
- c/c++补充_1
- 初学C#_1
- c++_1: 基础问题
- C基础_1
- jxl导入导出Excel
- 保存Bitmap到本地文件夹
- svn检查文件名中是否有空格
- GitHub 删除指定仓库
- 嵌入式Linux基础知识1(嵌入式Linux开发流程)
- C++面试笔记_1
- spring_scope作用域和使用外部属性文件和spEL表达式
- linux学习笔记--ipcs命令
- ubuntu14.04环境中github的安装与使用入门教程(最新,2016-06-03)
- Android View体系(十一)自定义ViewGroup
- Android考试系统
- jva 线程的生命周期和状态控制
- Android Studio开发中常见问题及解决(二)
- 写轮播需要注意的点