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); 

六个同名函数calculate,①②③④⑤⑥中任两个均构成重载,⑥和⑦也能构成重载,而①和⑦却不能构成重载,因为①和⑦的参数相同。

覆盖是指派生类中存在重新定义的函数,其函数名、参数列、返回值类型必须同父类中的相对应被覆盖的函数严格一致,覆盖函数和被覆盖函数只有函数体(花括号中的部分)不同,当派生类对象调用子类中该同名函数时会自动调用子类中的覆盖版本,
而不是父类中的被覆盖函数版本,这种机制就叫做覆盖。(由虚函数引起的

成员函数被重载的特征有:

1) 相同的范围(在同一个类中);

2) 函数名字相同;

3) 参数不同;

4) virtual关键字可有可无

覆盖的特征有:

1) 不同的范围(分别位于派生类与基类);

2) 函数名字相同;

3) 参数相同;

4) 基类函数必须有virtual关键字。

在以下四种情况会产生默认拷贝构造函数

1:类的成员类对象有拷贝构造函数

2:类继承的基类含有拷贝构造函数

3:类含有虚函数

4:类继承于虚基类
1 0
原创粉丝点击