简体   繁体   中英

What's the proper way of calling C++ functions from other classes?

I'm currently working on a project that has several classes, and at times, I have to call functions from other classes to make things work. I want to know if the way I'm doing it is efficient, or if there is another way I should be doing this. Here's an example

class FirstClass{    // FirstClass.cpp

public:

    void aFunction(){
        std::cout << "Hello!";
    }

private:
}

Let's say I wanted to call aFunction in another class, I'd do this:

#include "FirstClass.cpp"

class SecondClass{    //SecondClass.cpp

public:

    FirstClass getFirstClass;

    // I would then use getFirstClass.aFunction();
    // whenever I want to call.

private:
}

I don't feel like this is very productive. Is there a better way of doing this?

First of all why including source file FirstClass.cpp ? The proper way is to create a header file FirstClass.h and a source file FirstClass.cpp and include the header inside the source and in main.cpp .

Second: A member function is a member function it is a member of an object so you need an instance of that class to call its member. If you don't want to instantiate the class then declare the member function as a static function then you can either call it using an object or directly using class name followed by scope operator: FirstClass::aFunction() .

// FirstClass.h
class FirstClass{    // FirstClass.cpp
public:
    void aFunction();
}

// FirstClass.cpp
#include "FirstClass.h"
void FirstClass::aFunction(){
    std::cout << "Hello!";
}

// SecondClass.h
#include "FirstClass.h"
class SecondClass{
public:
    void foo();
private:
    FirstClass getFirstClass;
};

// SecondClass.cpp

void SecondClass::foo()
{
    getFirstClass.aFunction();
}

To make it a static:

struct A
{
    static void do_it(){std::cout << "A::do_it()\n";}
};

struct B
{
    void call_it(){ A::do_it();}
};
  • There's nothing with "productivity" to whether have a static or non-static data/function member.

  • The semi-colon is not redundant at the end of class body so you need t add them: class FirstClass{ }; class SecondClass{}; class FirstClass{ }; class SecondClass{}; .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM