【问题标题】:C++ making a class function member of another class functionC++使一个类函数成为另一个类函数的成员
【发布时间】:2012-09-29 11:05:23
【问题描述】:

我真诚地希望这里的人们不要介意这些问题。 在搜索了很多次之后,也许使用了错误的搜索词 - 然而 - 我似乎无法在这方面找到任何东西。 是的,我浏览了 cplusplus 的文档,但还是找不到答案。

我的问题很简单,如何才能让一个函数只能通过另一个函数调用?

这是一个例子

class someclas{
public:
void screen():
void setsomevariable (int somevariable){}
}clas;

当我调用函数 setsomevariable() 时,它应该只有在调用 screen 函数后才能使用。因此:

clas.screen().setsomevariable(..);

再次,我如何使这个函数成为 screen() 的成员?

【问题讨论】:

  • 为什么你想这样做?
  • 好吧,我只需要更改前面函数(屏幕)的值...这只是一个示例..
  • 很难说这里要问什么。让一个函数返回另一个函数是其成员的类很容易,但不清楚这是否能回答这个问题。
  • 这就是我问“为什么”问题的原因。最好知道你真正想要做什么......
  • 点赞。我会重载 screen()。

标签: c++ class function member


【解决方案1】:

这确实符合您的要求,但不一定满足您的需求。想提供更多帮助,但您固执地拒绝提供详细信息...

class Screen {
    public:
    void setsomevariable (int somevariable) {}
};

class someclas {
    Screen s;
    public:
    Screen& screen() { return s; }
} clas;

【讨论】:

  • 我想我将不得不放弃这个想法。谢谢你的帖子,非常感谢。
【解决方案2】:

一个成员函数属于一个类。你不能让一个函数成为另一个函数的成员。

你可以在你的类中保留一个布尔值,如果之前没有调用屏幕,则抛出异常。但这是一个丑陋的解决方案..

class someclas{
public:
  someclas & screen() { // returns a reference to your class to enable the clas.screen().setsomevariable() syntax
    screenCalled = true;
    return *this;
  }
  void setsomevariable (int somevariable){
    if (!screenCalled) {
      throw std::exception();
    }
    // some code
    screenCalled = false;
  }
  bool screenCalled;
}clas;

【讨论】:

  • 非常感谢这个例子。一个问题,不过。 QT 有它,所以你只能调用 如果你在调用一个类的特定函数之后调用它。即,如果您先调用 item,则只能调用 do()。谁能解释为什么会这样 - 或者更确切地说是怎么回事?
  • @user1707244 Karoly 的回答是如何。该函数返回对具有所需成员函数的类型的引用。
猜你喜欢
  • 2022-01-10
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 2011-06-23
相关资源
最近更新 更多