Вызовите класс дочернего метода в parent с родительским экземпляром

На самом деле, версии стандарта C ++ до того, как C ++ 11 определили ключевое слово «export», [] , можно просто объявить шаблоны в файле заголовка и реализовать их в другом месте.

К сожалению, ни один из популярных компиляторов не реализовал это ключевое слово. Единственный, о котором я знаю, - это интерфейс, написанный Edison Design Group, который используется компилятором Comeau C ++. Все остальные настаивали на том, что вы пишете шаблоны в заголовочных файлах, нуждающихся в определении кода для надлежащего создания экземпляра (как уже указывали другие).

В результате стандартная комиссия ISO C ++ решила удалить export особенность шаблонов, начинающихся с C ++ 11.

0
задан BT101 3 March 2019 в 16:22
поделиться

2 ответа

Если вы хотите использовать класс Parent в подклассе, класс Child, то вам нужно сделать следующее:

class Parent {
    foo() {
        console.log('foo!');
    }
}


class Child extends Parent {
    constructor() {
        super();
    }
}

let c = new Child(); //instantiate Child class
c.foo(); // here you are calling super.foo(); which is the Parent classes method for foo.
//foo!

Ключевое слово super используется для доступа и вызывать функции у родителя объекта.

Как использовать super

Или, в качестве альтернативы, если вы предпочитаете создать метод в дочернем классе, который заключает в себе родительский метод foo, а не доступ это путем создания экземпляра родительского класса с помощью вызова super в дочернем конструкторе:

class Parent {
    foo() {
        console.log('foo!');
    }
}


class Child extends Parent {
    method() {
        this.foo();
    }
}

let c = new Child();
c.method();
0
ответ дан amyloula 3 March 2019 в 16:22
поделиться

Я не хочу, чтобы мой родительский класс был слишком длинным, поэтому я отделил некоторые методы от него

Хорошо.

Итак, я создаю дочерний класс, однако я не хочу использовать дочерний класс в качестве экземпляра.

Нет, подклассы - неправильный подход. Особенно, если вы не хотите создавать экземпляр подкласса, это даже не решение вашей проблемы.

Чтобы разделить блоки кода, разделите их на отдельные функции. Они не должны быть связаны с вызывающей стороной посредством наследования и вообще не должны быть методами класса. Просто напишите

class MyClass {
  myMethod() {
    foo();
  }
}

function foo() {
  console.log('foo!');
}

const instance = new MyClass();
instance.myMethod();

или составьте свой объект из нескольких более мелких помощников:

class Outer {
  constructor() {
    this.helper = new Inner();
  }
  myMethod() {
    this.helper.foo();
  }
}

class Inner {
  foo() {
    console.log('foo!');
  }
}

const instance = new Outer();
instance.myMethod();
0
ответ дан Bergi 3 March 2019 в 16:22
поделиться
Другие вопросы по тегам:

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