在 C++ 中实现静态变量的访问器
implementing an accessor for a static variable in c++
我是一名CS学生,现在我们正在学习继承。对于我们的作业,老师给了我们一个主文件和一个班级标题.cpp。我们希望在不更改给定文件的情况下创建标头的.cpp实现。我已经完成了大部分工作,但这是我无法实现的:
// File: employee.h
class Employee : public Person
{
private:
static Company company;
public:
static Company GetCompany();
static void SetCompany(const Company& company);
}
这是我无法使用的[静态虚空设置公司]。通常在实现中,我只会这样做
// File: employee.cpp
void Employee::SetCompany(const Company& company) { this->company = company; }
但是我收到错误"'this'只能在非静态成员函数中使用"。我真的不确定我应该如何分配变量,而且它从未在课堂上得到解决。任何帮助将不胜感激。请注意,这几乎是我应该保留的格式,所以希望任何建议都不会偏离太多。无论如何,提前感谢,如果有什么需要澄清的,请告诉我......或者如果我只是对此视而不见和/或愚蠢。
要访问静态字段,请使用 Employee::company
,因为不能使用 this
,因为它旨在引用类的实例。
你的二传手将成为
void Employee::SetCompany(const Company& company) {
Employee::company = company;
}
但是如果你试图简单地替换你的setter,你的编译器会抛出一个错误,说它不知道Employee::company
。因为它不是实例化的。您需要在.cpp文件中,就像使用函数来声明字段一样
Company Employee::company;
要扩展前面的评论,您可以使用静态成员的全名来引用它们,例如 Employee::company
。因此,您应该能够通过简单地将函数更改为以下内容来修复您的示例:
static void SetCompany(const Company& company) { Employee::company = company; }
这是因为静态成员变量独立于类的特定实例。this
关键字引用类的特定实例。因此,通过更改静态成员,类的所有实例化都会发生此更改。
对于静态变量,你只引用类变量而不是实例。
void Employee::SetCompany(const Company& company) {
Employee::company = company;
}
了解编译器和语言范围规则对您来说很重要。 当一个方法(静态或其他方法)有一个名称为"company"的 PARAMETER 时,但该类具有一个名称为"company"的可访问 MEMBER(静态或其他),解析裸名称"company"的规则是什么? 如果没有名为公司的参数,您如何/应该引用成员?
这是另一个皱纹 - 如果有一个名为公司的本地参数怎么办?
void Employee::CompareCompany(const Company &company)
{
Company company("another company");
// which company is being referenced on the LHS (left hand side)
// of the == expression below? The method parameter or the local variable?
if (company == Employee::company)
stout << "They match!"
}
你认为这对我来说继续使用相同的名称是个好主意吗? 它们都是公司的实例,那么为什么"公司"不是所有这些公司的好名字呢???
- 尝试通过多个向量访问变量时,向量下标超出范围
- 通过按地址访问变量
- 通过 get-Method 访问变量在类外不起作用
- 是否可以使用指针访问变量以避免直接编辑变量?
- 我无法访问变量的值,即使我通过范围传递了它
- 简单的问题 - 如何从单独的"结构"内的'class'访问变量?
- (C++) 从另一个类访问变量时值无效
- 返回实例变量的c++方法可以访问变量中的数据,但不能更改它,但在编译时不会生成错误
- 是否可以从字符串访问变量?
- 变量 z 无法从其他函数访问变量 x
- 如何在 C++ 中从 void 返回函数访问变量
- 在链接的程序集文件中,我想从 c++ 调用代码访问变量.是否可以在不触发访问冲突的情况下执行此操作?
- 在C 中本地声明隐藏的封闭范围(而非全局)中访问变量
- 从函数中删除动态内存分配,但无法访问变量
- 如何从派生类中的基类访问变量的值?
- 如何通过指针更快地访问变量,然后直接访问变量?
- 如何在公共类 c++ 中访问变量的值
- 从 Visual Studio 中的多个源文件访问变量
- 使用命名空间和模板类访问变量
- 从子对话框访问变量