使用 C++ 和修改 Private/Protected 基 Class 的属性
Using C++ and Modifying Private/Protected Attributes of a Base Class
很抱歉,如果我问的问题之前已经被问过很多次了。我对 C++ 很陌生。我想知道如何使派生 class 继承其基 class 的私有属性的副本。要么,要么能够通过 public 方法(例如 getter 和 setter)从基础 class.
修改它们
本质上,我有一个 Person class,它继承自 Creature class。我希望 Person 类型的对象具有与 Creature class 类似的属性。我希望 Creature class 中的私有属性保持私有,因为我被告知只有 class 函数应该是 public,而不是 class 变量。但是,我似乎无法在函数中调用 Creature class 的 public 方法,Person class 似乎也没有继承它们或它们的副本。
我拒绝简单地制作私有属性的原因public是因为我想学习正确的编程技术。我不确定这种情况是否属于规则的例外。
我有处理实现的 cpp 文件。希望这足以帮助您回答我的问题。
我的基地 Class:
/***
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);
};
我的衍生Class:
/***
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
生物 Class 的 setSpeciesName 方法的实现:
void Creature::setSpeciesName(const std::string a)
{
speciesName = a;
}
基本上有两种方法可以解决这个问题:
1. 将基本构造函数显式调用到派生构造函数中。
2.使用友元运算符来使用私有元素
在提供的代码中,Person
没有继承自Creature
,所以它没有继承Creatureclass的成员。
定义您的 Person
class 使其继承自 Creature
class Person : public Creature
{
// same as before
};
有关 public 与私有继承的更多详细信息,请参见 Difference between private, public, and protected inheritance。通常你想要 public 继承。
很抱歉,如果我问的问题之前已经被问过很多次了。我对 C++ 很陌生。我想知道如何使派生 class 继承其基 class 的私有属性的副本。要么,要么能够通过 public 方法(例如 getter 和 setter)从基础 class.
修改它们本质上,我有一个 Person class,它继承自 Creature class。我希望 Person 类型的对象具有与 Creature class 类似的属性。我希望 Creature class 中的私有属性保持私有,因为我被告知只有 class 函数应该是 public,而不是 class 变量。但是,我似乎无法在函数中调用 Creature class 的 public 方法,Person class 似乎也没有继承它们或它们的副本。
我拒绝简单地制作私有属性的原因public是因为我想学习正确的编程技术。我不确定这种情况是否属于规则的例外。
我有处理实现的 cpp 文件。希望这足以帮助您回答我的问题。 我的基地 Class:
/***
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);
};
我的衍生Class:
/***
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
生物 Class 的 setSpeciesName 方法的实现:
void Creature::setSpeciesName(const std::string a)
{
speciesName = a;
}
基本上有两种方法可以解决这个问题: 1. 将基本构造函数显式调用到派生构造函数中。 2.使用友元运算符来使用私有元素
在提供的代码中,Person
没有继承自Creature
,所以它没有继承Creatureclass的成员。
定义您的 Person
class 使其继承自 Creature
class Person : public Creature
{
// same as before
};
有关 public 与私有继承的更多详细信息,请参见 Difference between private, public, and protected inheritance。通常你想要 public 继承。