使用类方法而不实例化

时间:2018-04-14 18:47:58

标签: c++ class instance point

我有一个POO练习的问题。问题是:

  

添加到上一个练习的Point类中的两个公共内联   指示对象类型的实例数的方法   已被创造,有多少是在记忆中。注意:会计师必须   是班上的私人成员。证明调用getCantCreated   在创建任何对象之前使用getCantExisting方法。

但是我编译代码,出现错误。它' S:

error: cannot call member function 'int Punto::getCantCreada()' without object

我该如何解决?

我知道问题来自于没有实例化对象,但是如何在不创建对象的情况下使用此语句Punto::getCantCreada()? 我读到这将通过静态变量解决,但在这种情况下:它的实现是什么样的?

代码是:

#include <iostream>
using namespace std;

class Punto{
  private:
    double mx;
    double my;
    int contInst = 0;
    int contExist = 0;
    void verificador1000();

  public:
    Punto(double x=0,double y=0);
    Punto(const Punto& p);
    ~Punto();
    int getCantCreada();
    int getCantExistente();
};

Punto::Punto(double x,double y){
  mx = x;
  my = y;
  contInst++;
  contExist++;
  verificador1000();
}
Punto::Punto(const Punto& p){
  mx = p.mx;
  my = p.my;
  contInst++;
  contExist++;
  verificador1000();
}

void Punto::verificador1000(){
  if(mx>1000) mx = 1000;
  if(mx<-1000) mx = -1000;
  if(my>1000) my = 1000;
  if(my<-1000) my = -1000;
}

int Punto::getCantCreada(){
  return contInst;
}
int Punto::getCantExistente(){
  return contExist;
}

void ff (void){
  Punto p,q,w;
  Punto h(34);
  Punto r=h;
  cout <<"a. Puntos Creados:"<<Punto::getCantCreada()<< " - Existentes:"<< r.getCantExistente()<<endl;
}

int main(int argc, char *argv[]){
  cout <<"1. Puntos Creados:"<<Punto::getCantCreada()<< " - Existentes:"<< Punto::getCantExistente()<<endl;
  Punto p(12.34,-56.78);
  cout <<"2. Puntos Creados:"<<p.getCantCreada()<< " - Existentes:"<< p.getCantExistente()<<endl;
  Punto h(p);
  cout <<"3. Puntos Creados:"<<Punto::getCantCreada()<< " - Existentes:"<< Punto::getCantExistente()<<endl;
  ff();
  cout <<"4. Puntos Creados:"<<Punto::getCantCreada()<< " - Existentes:"<< Punto::getCantExistente()<<endl;

  std::cin.get();
  return 0;
}
#include <iostream>
using namespace std;

class Punto
{
private:
    double mx;
    double my;
    int contInst = 0;
    int contExist = 0;
    void verificador1000();

public:
    Punto(double x=0,double y=0);
    Punto(const Punto& p);
    ~Punto();
    int getCantCreada();
    int getCantExistente();
};

Punto::Punto(double x,double y)
{
    mx = x;
    my = y;
    contInst++;
    contExist++;
    verificador1000();
}
Punto::Punto(const Punto& p)
{
    mx = p.mx;
    my = p.my;
    contInst++;
    contExist++;
    verificador1000();
}

void Punto::verificador1000()
{
    if(mx>1000)
        mx = 1000;
    if(mx<-1000)
        mx = -1000;
    if(my>1000)
        my = 1000;
    if(my<-1000)
        my = -1000;
}

int Punto::getCantCreada()
{
    return contInst;
}
int Punto::getCantExistente()
{
    return contExist;
}

void ff (void)
{
    Punto p,q,w;
    Punto h(34);
    Punto r=h;
    cout <<"a. Puntos Creados:"<<Punto::getCantCreada()<< " - Existentes:"<< r.getCantExistente()<<endl;
}

int main(int argc, char *argv[])
{
    cout <<"1. Puntos Creados:"<<Punto::getCantCreada()<< " - Existentes:"<< Punto::getCantExistente()<<endl;
    Punto p(12.34,-56.78);
    cout <<"2. Puntos Creados:"<<p.getCantCreada()<< " - Existentes:"<< p.getCantExistente()<<endl;
    Punto h(p);
    cout <<"3. Puntos Creados:"<<Punto::getCantCreada()<< " - Existentes:"<< Punto::getCantExistente()<<endl;
    ff();
    cout <<"4. Puntos Creados:"<<Punto::getCantCreada()<< " - Existentes:"<< Punto::getCantExistente()<<endl;

    std::cin.get();
    return 0;
}

1 个答案:

答案 0 :(得分:2)

  

error: cannot call member function 'int Punto::getCantCreada()' without object

     

我该如何解决?我知道问题来自不实例化对象,但我如何使用此语句Punto::getCantCreada()

如果您将contInst设为静态,则可以getCantCreada()为静态,然后您可以拨打Punto::getCantCreada()

class Punto
{
  private:
    ...
    static int contInst;
    ...
  public:
    ...
    static int getCantCreada();
    ...
};

int Punto::contInst = 0;