C ++,无法获得受保护的抽象类属性

时间:2017-12-29 18:36:32

标签: c++ abstract-class getter-setter

大家好,

我正在创建扩展抽象类的getter / setter,我不明白为什么我能够设置属性值但不能从setter中读取它。

//主文件

#include <iostream>
#include "cat.h"
int main() {
  Cat* tom;
  tom->setName("TOM");
  std::cout << tom->getName() << std::endl; // Here I got error EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
  return 0;
}

// Animal.h文件

#ifndef CLASSES_ANIMAL
#define CLASSES_ANIMAL

#include <string>

using namespace std;
class Animal {
  protected:
    string name;
  public:
    virtual inline string getName() const = 0;
    virtual void setName() = 0;
    virtual ~Animal() = default;
};

#endif //CLASSES_ANIMAL

//在Cat.h中

#ifndef CLASSES_CAT_H
#define CLASSES_CAT_H

#include <string>
#include "animal.h"

class Cat : protected Animal {
  public:
    Cat(){};
    inline string getName() const{ return name; }
    void setName(string sentName);
    ~Cat(){};
};


#endif //CLASSES_CAT_H

// Cat.cpp

#include "cat.h"

void Cat::setName(string sentName) {
  if(!sentName.empty()){
    name = sentName;
  }
}

1 个答案:

答案 0 :(得分:2)

您需要创建其对象。

Cat* tom = new Cat();