mat*_*ewM 0 c++ arrays pointers function
我知道如果数组中甚至没有对象,那么仍然有一些地址.但我想找到解决方案来检查我们会询问的特定索引下是否有对象.我需要有这样的机制来向多边形添加新的点.但在此之前,我需要知道如果有一个对象,对象的计数器是否应该增长或保持相同的值.也许我应该尝试填充所有数组NULL?
main.cpp中
#include <iostream>
#include "punkt.h"
#include "wielokat.h"
using namespace std;
int main(int argc, char *argv[])
{
    Punkt  p1("p1", 10, 20); // 10x20
    Punkt  p2("p2", 1, 1);   //1x1
    Wielokat w1 ("square", 4);
    w1.set(p1,0);
    w1.set(p2,0);
    w1.showWielokat();
    system("PAUSE");
    return EXIT_SUCCESS;
}
Wielokat.cpp
#include "punkt.h"
#include "wielokat.h"
#include <iostream>
using namespace std;
void Wielokat::increase(int n)
{
    m_ilosc = m_ilosc + n;
    m_tab = new Punkt * [m_ilosc];  
    cout<<"Dodaj "<<m_ilosc<<endl;
}
void Wielokat::decrease(int n)
{
    m_ilosc = m_ilosc - n;
    if(m_ilosc<0){ m_ilosc=0;}
    m_tab = new Punkt * [m_ilosc]; 
    cout<<"Odejmij "<<m_ilosc<<endl;
}
void Wielokat::set(Punkt p, int pos)
{
    //How to check if there was already object ?
    m_tab[pos] = new Punkt(p);
    m_counter++;
}
void Wielokat::showWielokat()
{
    for(int i=0; i<m_counter; i++){
        m_tab[i]->show();
    }
}
void Wielokat::crash(int pos){
    //after delete all elements moved one by one to the left side
    delete m_tab[pos];
    for(int i=pos; i<m_ilosc; i++){
        m_tab[i]=m_tab[pos+1];
    }
}
double Wielokat::getParimeter(){
    //here is function whih will count circuit 
}
Wielokat.h
class Wielokat {
    public:
    Wielokat(char* nazwa, int ilosc):m_nazwa(nazwa), m_ilosc(ilosc) 
    {
        m_tab = new Punkt * [m_ilosc]; 
        m_counter = 0;
    }
    Wielokat(const Wielokat& p): m_ilosc(p.m_ilosc), m_nazwa(strdup(p.m_nazwa))
    {}
    ~Wielokat()
    {
        for(int i=0; i<m_counter; i++){
            delete m_tab[i];
        }
        delete m_tab;
    }
    //Function:
    void increase(int n);
    void decrease(int n);
    void set(Punkt p, int pos);
    void crash(int pos);  //delete
    void showWielokat();
    double getParimeter();
    private:
    Punkt **m_tab;  //our tab of elemenst
    char* m_nazwa;
    int m_ilosc;
    int m_counter;
};
您使用C++进行编码,这意味着您可以拥有std::vector<Punkt>(或者std::vector<Punkt*>,如果需要多态).不要重新发明轮子; 用它.
使用std::vector所有手动分配代码根本不需要,您可以检查有多少元素vec.size().
更新:好的,所以你不能使用vector因为这是功课.
另一种解决方案是在初始化时将阵列的内存清零,然后m_tab[i] == 0在尝试使用对象之前检查是否存在i.使用memset,看起来像
// WARNING! INCOMPLETE/BUGGY CODE!
m_tab = new Punkt* [m_ilosc];
memset(m_tab, 0, m_ilosc * sizeof(m_tab[0]));
而且由于您是从类中的两个位置执行此操作,因此应将此逻辑移到单独的private方法中.
关于不完整/有缺陷的部分,上面这两行有一些问题:
delete[]d; 这是内存泄漏.你应该把它们作为下一步来解决.
| 归档时间: | 
 | 
| 查看次数: | 994 次 | 
| 最近记录: |