在类声明和方法定义之外使用类方法(类函数成员)

时间:2015-10-01 12:04:33

标签: c++

我正在阅读一本用于自学编程的C ++教科书。

现在我在下面的段落中有一个关于遗产的问题

以红色加下划线。

enter image description here

我不明白那个意思是什么意思。

  

在类声明和方法定义之外使用类方法(类函数成员)。

如何在方法定义之外使用类方法(类函数成员)?

有哪些特殊措施?

有人可以帮我吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

这意味着如果您在Stock的其他方法中使用它,则不需要类范围Stock::Update(),例如

void Stock::Foo()
{
    // Do stuff

    Update(10.0);   // This is Stock::Update()
}

但是如果你在Stock类的方法之外的某个函数中调用它,则需要一个Stock的实例来调用该方法,因为它不是static

void Bar()
{
    Stock stock;

    // Do stuff

    stock.Update(10.0);    // This will find the Stock:: scope
}

这也意味着方法Update必须为public,您才能在上面的示例Bar中调用它。如果是private,则只能使用其他Update方法调用Stock方法。

class Stock
{
public:
    void Update(double price);
};

答案 1 :(得分:0)

我认为基本上它意味着为了从其他代码(main方法,其他类方法体等)使用这个类方法,你需要额外的措施。有了这个,它基本上意味着你必须使这个类对你尝试使用它的范围可见(通常通过包括它所定义的标题),这样你就可以实例化这个类的变量/对象并在其上调用它的方法。

例如,要从其他代码中使用此类(让我们称之为foo),您必须执行以下操作:

#include "foo.h"

void MyClass::bar()
{
     Foo instanceOfFoo;
     instanceOfFoo.Update();
     ....
}

如果需要从Foo类.cpp文件中调用Update()方法,则无需创建自身的实例。因此,您可以使用这些附加度量调用其方法。因此,Foo类方法可以像下面这样调用Update:

void Foo::SomeMethod()
{
    Update(); // 
}

实际上上面的方法有一个名为 this 的隐藏参数,它引用了Foo类的当前实例。所以上面的代码就像:

void Foo::SomeMethod(Foo* const this)
{
    this->Update(); // 
}