Прошу прощения, если я спрашиваю то, что спрашивалось много раз здесь. Я очень новичок в C ++. Я хочу знать, как заставить производный класс наследовать копии личных атрибутов его базового класса. Либо так, либо вы можете изменять их с помощью открытых методов, таких как методы получения и установки, из базового класса.
По сути, у меня есть класс Person, и он наследуется от класса Creature. Я хочу, чтобы объекты типа Person имели атрибуты, как в классе Creature. Я хочу, чтобы приватные атрибуты в классе Creature оставались приватными, потому что меня учили, что только функции класса должны быть открытыми, а не переменными класса. Однако я не могу вызвать публичные методы класса Creature в функции, и класс Person, похоже, не наследует их или их копии.
Причина, по которой я отказываюсь просто сделать частные атрибуты общедоступными, заключается в том, что я хочу изучать правильные методы программирования. Я не уверен, является ли эта ситуация исключением из правила или нет.
У меня есть cpp файлы, которые обрабатывают реализацию. Надеюсь, этого будет достаточно, чтобы помочь вам ответить на мой вопрос.
Мой базовый класс:
/***
File: Creature.h
Desc: Contains Creature Class Definitions.
This is the base class for the Animal, Person, and PlayerCharacter classes.
Author: LuminousNutria
Date: 5-7-18
***/
#include <string>
#ifndef _CREATURE_H_
#define _CREATURE_H_
class Creature
{
private:
// General Information
std::string speciesName;
int hitpoints;
int movement;
// Physical Attributes
int strength;
int willpower;
int intelligence;
int leadership;
public:
// setters
void setSpeciesName(const std::string a);
void setHitpoints(const int a);
void setMovement(const int a);
void setStrength(const int a);
void setWillpower(const int a);
void setIntelligence(const int a);
void setLeadership(const int a);
// getters
std::string getSpeciesName();
int getHitpoints();
int getLoyalty();
int getMovement();
int getStrength();
int getWillpower();
int getIntelligence();
int getLeadership();
// modders
void modHitpoints(const int a);
void modMovement(const int a);
void modStrength(const int a);
void modWillpower(const int a);
void modIntelligence(const int a);
void modLeadership(const int a);
};
Мой производный класс:
/***
File: Person.h
Desc: Contains Person Class Definitions.
This is a derived class of the Creature class.
Author: LuminousNutria
Date: 5-7-18
***/
#include "Creature.h"
#include <string>
#ifndef _PERSON_H_
#define _PERSON_H_
class Person
{
protected:
std::string personName;
int loyalty;
int experience;
int level;
int cash;
public:
// constructors
Person();
Person(const std::string pName, const int loy, const int exp,
const int lvl, const int c,
const std::string sName, const int hp, const int mov,
const int stre, const int will, const int intl,
const int lead);
// setters
void setPersonName(std::string pName);
void setLoyalty(const int loy);
void setExperience(const int exp);
void setLevel(const int lvl);
void setCash(const int c);
// getters
std::string getPersonName();
int getLoyalty();
int getExperience();
int getLevel();
int getCash();
// modders
void modLoyalty(int a);
void modExperience(int a);
void modLevel(int a);
void modCash(int a);
};
#endif
Реализация метода setSpeciesName класса существ:
void Creature::setSpeciesName(const std::string a)
{
speciesName = a;
}