hpp文件&&实现类扩展向量

时间:2010-10-04 16:10:41

标签: c++ stl vector

我有两个问题。

  1. 有人知道hpp文件是什么吗?为什么有人这样做?

  2. 我正在尝试实现一个扩展vector

  3. 的类

    但我想使用所有原始函数并为每个函数添加操作。 所以我写道:

    #include <iostream>
    #include <vector>
    
    #ifndef _MY_PERSONAL_VECTOR
    #define _MY_PERSONAL_VECTOR
    
    
    class PersonalVec: public std::vector<int>{
    
    public:
        PersonalVec();
    
        void push_back(const int& Val);
    
    
    };
    
    #endif
    

    并在cpp文件中:

    #include <iostream>
    #include "PersonalVec.hpp"
    
    using namespace std;
    
    PersonalVec::PersonalVec(): std::vector<int>(){
    }
    
    void PersonalVec::push_back(const int& Val):vector<int>::push_back(Val){
        cout<<"new improved vector";
    }
    

    所以在函数push_back中我试图调用向量push_back,但它无效。

    任何人都有任何想法?

3 个答案:

答案 0 :(得分:6)

  
      
  1. 有谁知道hpp文件是什么?
  2.   

.hpp 是C ++头文件的常用文件扩展名。

  
      
  1. 我正在尝试实现一个扩展vector
  2. 的类   

You probably don't want to do that。标准库容器没有虚拟析构函数,并且不打算从中派生。你应该更喜欢:

  • 使用合成(将容器作为成员变量)或
  • 使用非成员函数扩展功能

哪个更好取决于你需要做什么。

答案 1 :(得分:2)

.hpp是一种命名约定,有时用于区分包含模板类和非模板类的头文件,或区分C代码和C ++代码。

您需要封装矢量并委托给它。

class PersonalVec{

public:
    PersonalVec();

    void push_back(const int& Val);

private:
    std::vector<int> data;

};

void PersonalVec::push_back(const int& Val){
    cout<<"new improved vector";
    data.push_back(Val);
}

答案 2 :(得分:0)

A * .hpp文件是头文件。它与* .h文件没有什么不同,只是有些人喜欢这样命名,以便他们可以立即知道该文件是C头还是C ++头。

您只能在构造函数的定义中使用:stuff()。您的方法定义应为:

void PersonalVec::push_back(const int& Val) {
  vector<int>::push_back(Val);
  cout << "new improved vector";
}