Я программист на C #, который хочет изучить C ++.

В C # я использую статические классы для использования методов без экземпляра класса. Есть ли что-то подобное в C ++.

Я нашел эту функцию и не уверен, могу ли я иметь функции C в программе на C ++ или все функции должны быть методами класса.

vector<string> split(string str, char delimiter) {
  vector<string> internal;
  stringstream ss(str); // Turn the string into a stream.
  string tok;

  while(getline(ss, tok, delimiter)) {
    internal.push_back(tok);
  }

  return internal;
}

Могу ли я иметь исходный файл c в программе на C ++? Или, может быть, мне нужен класс static с методами static?

c++
-2
VansFannel 14 Апр 2016 в 22:53

4 ответа

Лучший ответ

Да, функции не обязательно должны быть в классе C ++. Однако если у вас есть несколько исходных файлов, вы, вероятно, захотите предоставить прототип для указанной функции в заголовке.

Так что в split.hpp

#include <vector>
#include <string>
using namespace std;
vector<string> split(string str, char delimiter);

Затем в split.cpp

#include "split.hpp"
vector<string> split(string str, char delimiter) {
  vector<string> internal;
  stringstream ss(str); // Turn the string into a stream.
  string tok;

  while(getline(ss, tok, delimiter)) {
    internal.push_back(tok);
  }

  return internal;
}

Затем всякий раз, когда вам нужно использовать функцию разделения, вы можете просто включить заголовок, используя #include "split.hpp".

2
Lewis GC M 14 Апр 2016 в 20:02

У вас может быть функция static:

class Test {
    public:
        Test() {}

        static int GetData() {
            return 1;
        }

        int GetMoreData() const {
            return 2;
        }
};

Test::GetData(); // call this function without an instance of a class

Test A;
A.GetMoreData(); // you can only call this with an instance of a class
0
ForceBru 14 Апр 2016 в 19:57

Вам не нужно иметь класс в C ++, вы можете просто иметь функцию, следующее в файле cpp является допустимой программой:

#include <iostream>
void main()
{
    std::cout << "Hello world" << std::endl;
}

В C # вам нужно поместить каждый метод в класс, поэтому у вас есть статические классы.

Вы можете просто вызвать метод, не являющийся частью класса, по имени, он всегда доступен. По этой причине их часто называют глобальными методами.

Вы можете избежать двусмысленности, используя пространства имен, но это немного сложнее, чем этот вопрос.

0
Guvante 14 Апр 2016 в 20:03

Да, вы можете смешивать «c» и «c ++», хотя это не рекомендуется. Чтобы узнать больше, см. (https://isocpp.org/wiki/faq/mixing- c-and-cpp)

-1
Dendi Suhubdy 14 Апр 2016 в 20:04