如何从类内实例化的对象访问私有变量
How to access private variable from object instantiated inside class
我正在尝试更改对象内类的私有变量,该变量在该类中初始化。我的意图可以从下面的简单例子中得出。从obj
调用的Increment
应该会增加BaseClass::stuff
。
template <typename ObjectType>
class BaseClass{
public:
int Increment(){
return obj.Increment();
}
private:
int stuff = 0;
ObjectType obj;
};
class ObjectType{
public:
int Increment ()
{
return BaseClass<ObjectType>::stuff++;
};
};
int main () {
BaseClass<ObjectType> base;
base.Increment(); // should increase stuff by 1;
}
我能想到的一种方法是将东西作为参数传递给obj.Increment()
。
有没有办法在不将其作为参数传递的情况下实现这一点?
您的示例有一些错误。
修复并添加friend
说明符后,它应如下所示:
template <typename ObjectType>
class BaseClass{
public:
friend ObjectType;
int Increment(){
return obj.Increment();
}
private:
static int stuff;
ObjectType obj;
};
template<typename T>
int BaseClass<T>::stuff = 0;
class ObjectType{
public:
int Increment ()
{
return BaseClass<ObjectType>::stuff++;
};
};
int main () {
BaseClass<ObjectType> base;
base.Increment(); // should increase stuff by 1;
}
> 1、东西不是静态的公共成员,所以不能直接通过 ClassName::来实现,你想用 "BaseClass::stuff++" 的 id ,请改成静态公共的,这样 BaseClass 的所有对象共享一个东西。
2、否则,ObjectType 需要"知道"BaseClass,ObjectType::Increment 可以通过 BaseClass 的一些帮助功能来增加 BaseClass 的东西,或者让 ObjectType 成为 BaseClass 的朋友。
ObjectType own BaseClass 的示例代码:
template <typename ObjectType>
class BaseClass{
public:
void increaseStuff() {++stuff;}
....
}
class ObjectType
{
BaseClass<ObjectType>& itsBase;
public:
ObjectType(BaseClass<ObjectType>& base) : itsBase(base)
int Increment ()
{
return itsBase.increaseStuff();
};
};
但我觉得这个设计看起来很奇怪,意思是"我想通过别人改变我拥有的东西",为什么不直接改变我的东西。在这种情况下,我认为 ObjectType 拥有的东西更好。
相关文章:
- 使用迭代器时如何访问对象在向量中的位置?
- 无法通过指针访问对象的成员
- 如何从传递到对象的对象内部访问对象的类属性?
- 有没有办法在C++中循环访问对象的不同数据成员
- 如何访问对象动态数组中的私有成员变量?
- c++ 循环访问对象列表并删除对象
- 循环访问对象列表 c++
- 访问对象的取消引用值的语法
- 如何访问对象的成员变量的取消引用值
- C++:访问对象内部子对象的方法
- 如果访问对象,则指向的对象内部的指针会更改内存位置
- 是否可以从 C++ 中的构造函数访问对象名称?
- 仅允许访问对象的成员,而不允许访问对象本身
- 从地图访问对象会导致新对象C 的实例化
- 如何在数组中访问对象内的字符串
- 在C 中运行时从指针访问对象实例
- 有关使用矢量迭代器访问对象方法的问题
- 当对象的指针存储在矢量中时,如何访问对象中的方法?
- 显式调用"运算符 new"后无法访问对象的函数
- 尝试访问对象数组中的对象,但只保存了一个对象