c++如何直接调用自己写的类中的函数,就像调用标准库中的函数那样

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++如何直接调用自己写的类中的函数,就像调用标准库中的函数那样相关的知识,希望对你有一定的参考价值。

如题,比如我们用math.h中的函数,都只要包含math.h,然后在程序中就可以直接调用。
那么加入我写了一个类,这个类中有个函数,起计算的作用,我把这个类放在一个叫abc.h的文件中,abc.c++是他的相关的函数的情况。
我想在另一个main.c++的文件中调用abc中的一个函数,如何才能实现上面说的直接调用呢?
O(∩_∩)O谢谢!

如果想要在C++里调用成员函数(包括虚函数),需要提供一个简单的包装(wrapper)。例如:

// C++ code:
class C

      // ...
      virtual double f(int);
;
 
extern "C" double call_C_f(C* p, int i) // wrapper function

      return p->f(i);

然后,你就可以这样调用C::f():

double call_C_f(struct C* p, int i);
void ccc(struct C* p, int i)

      double d = call_C_f(p,i);

参考技术A 两种途径:
1、生成一个类的对象,然后用这个对象调用函数
例如:
ClassA a(5);
a.func1();
或者
ClassA *pA = new ClassA(5);
pA->func1();
2、对于类的静态(static)函数,可以直接用类名调用
例如:
ClassA::func2();本回答被提问者采纳

如何在另一个类中使用带有构造函数的类?

【中文标题】如何在另一个类中使用带有构造函数的类?【英文标题】:How to use a class with a constructor in another class? 【发布时间】:2020-03-19 10:39:20 【问题描述】:

C++ 中的新功能,我想在另一个类中使用一个带有构造函数的类,并在全局范围内使用它的方法。

MyMachine 类调用 MyComponent 类。如果 MyComponent 没有构造函数,它可以工作,但我不知道如何使用构造函数调用它。

工作:

#include <iostream>

/*********************************************
* MyComponent
*********************************************/

// MyComponent.h
class MyComponent

  public:
    int _id;
    MyComponent();
    int getId();
;

// MyComponent.cpp
MyComponent::MyComponent()




int MyComponent::getId()

  return _id;


/*********************************************
* MyMachine
*********************************************/

// MyMachine.h
class MyMachine

  private:
    MyComponent component;
  public:
    MyMachine();
    void printComponentInfo();
;

MyMachine::MyMachine()

  component._id = 123456;


void MyMachine::printComponentInfo()

  int id = component.getId();
  std::cout << id << "\n";


/*********************************************
* Main
*********************************************/

int main()

  MyMachine machine;
  machine.printComponentInfo();

return 0;

显示 123456

但是使用构造函数,它不起作用:

#include <iostream>

/*********************************************
* MyComponent
*********************************************/

// MyComponent.h
class MyComponent

  public:
    int _id;
    MyComponent(int id);
    int getId();
;

// MyComponent.cpp
MyComponent::MyComponent(int id)

    _id = id;


int MyComponent::getId()

  return _id;


/*********************************************
* MyMachine
*********************************************/

// MyMachine.h
class MyMachine

  private:
    MyComponent component(int id);
  public:
    MyMachine();
    void printComponentInfo();
;

MyMachine::MyMachine()

  component._id = 123456;


void MyMachine::printComponentInfo()

  int id = component.getId();
  std::cout << id << "\n";


/*********************************************
* Main
*********************************************/

int main()

  MyMachine machine;
  machine.printComponentInfo();

return 0;

抛出错误

all.cpp:在构造函数“MyMachine::MyMachine()”中:all.cpp:43:7: 错误: 无效使用成员函数‘MyComponent MyMachine::component(int)’ (你忘了'()'吗?) 组件._id = 123456; ^~~~~~~~~ all.cpp:在成员函数'void MyMachine::printComponentInfo()'中:all.cpp:48:16:错误:无效使用 成员函数‘MyComponent MyMachine::component(int)’(你 忘记“()”?) int id = component.getId();

【问题讨论】:

使用member initializer list调用参数构造函数 【参考方案1】:

你有两个错误:

缺少MyComponent 类的默认构造函数:
MyComponent() : _id(0) 
MyMachine 类中的私有数据成员声明错误:
class MyMachine 
private:
    MyComponent component;
    // ...
;

【讨论】:

谢谢它有效。我只是想知道如何在 MyMachine 中使用选定的 int 参数调用 MyComponent() 构造函数。这可能吗? @Phoax 当然有可能。你可以拥有像MyMachine::MyMachine() : component(1) 这样的MyMachine 构造函数。这里调用了MyComponent 构造函数。如果回答对你有帮助,请采纳。 @Phoax 或者你甚至可以做MyMachine::MyMachine(int id) : component(id) ...【参考方案2】:

我认为您的问题在于理解何时调用构造函数。

当您构造MyMachine 的新对象时,代码首先初始化MyMachine 的所有成员进入构造函数的主体。在进入 ctor 主体之前,您可以在 initializer list 中自行初始化成员:

MyMachine::MyMachine(int id) :
    _id(id)


其实这是一种更高效的初始化方式,因为所有成员必须在ctor体之前初始化,因此,在之前的状态下,代码会:

    使用其无参数 ctor 初始化 _id。 将值id 放入MyComponent。

当您使用初始化器列表时,初始化过程中只有 一个 步骤,效率更高(尤其是在更复杂的类型中!)。

【讨论】:

以上是关于c++如何直接调用自己写的类中的函数,就像调用标准库中的函数那样的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中调用父类中的函数? [复制]

PHP如何在类中调用另一个文件的类

在c语言中怎样用c++类中的对象调用c++类中的方法?

从外部类 C++ 正确调用嵌套类中的函数

如何在另一个类中使用带有构造函数的类?

我可以在所述类中调用我的函数中的类吗?