@Yonghwa
121

Каков аналог джавоских интерфейсов в С++?

What's up, программач.

В С++, при определении класса в хедер файле, мы можем объявить пустой конструктор.
В то же время, в соурс файле, мы можем определить этот конструктор с использованием так называемого "binary scope resolution operator ( :: )", что в свою очередь мне напоминает интерфейс из джава.

Пример:

person.h - файл

class Person
{
public:
    Person();
}
_______________________________
Person.cpp - файл

#include"Person.h"
Person::person(int i)
{
    int k = i;
}
_______________________________
AnotherPerson.cpp - файл

#include"Person.h"

Person::Person(int n, int j)
{
    int a = n;
    int b = j;
}

В файле с методом main, я могу создать экземпляр класса Person, и использовать разные конструкторы, в данном случае их 2, т.е выглядело бы примерно так:
#include "Person.h"

int main()
{
    Person one;
    Person two;

    one(1);
    two(2,3);

   std::cout << one << std::endl;
   std::cout << two << std::endl;
}

Я сразу прошу прощения за мистэйки в коде, но главное, что бы был смысл понятен, и самое главное, правильно ли я его понимаю.
  • Вопрос задан
  • 1355 просмотров
Пригласить эксперта
Ответы на вопрос 4
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Не тащите знания java в C++. Наживете себе проблем.

Хотите иметь конструкторы с разными наборами параметров - наобъявляйте их все в заголовке и дайте им тела в cpp.
Ответ написан
@encyclopedist
В С++ запись
A::B
означает всего лишь, что это B находится внутри A, где A это пространство имен, класс, или перечисление. B при этом может быть функцией, классом, статической переменной. (см. cppreference) Никакого специального значения для конструкторов такая запись не имеет. Никакого отношения к интерфейсам она тоже не имеет.

Аналогом интерфейсов в C++ являются абстрактные классы:
class Interface {
public:
    virtual int method() = 0;
};

class Implementation: public Interface{
public:
    int method() override {
         // some code
    }
};


PS: как уже было сказано, пытаться перенести какие-то привычки из одного языка в другой или найти аналоги для всего ни к чему хорошему обычно не приводит. Учите C++ как будто с нуля.
Ответ написан
Комментировать
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Каков аналог джавоских интерфейсов в С++

Классы без данных и только с чистыми виртуальными функциями.
В примерах написана какая-то ерунда: нельзя ни определить ни вызывать необъявленные методы классов, а конструкторы с одним и двумя параметрами вы не объявили.
Ответ написан
Nipheris
@Nipheris Куратор тега C++
recursi0n доброй ночи. Пожалуйста, прочтите мой ответ на аналогичный вопрос: ClassName::functionName или objectName.functionName? , наверняка что-то почерпнете для себя.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы