На самом деле, версии стандарта C ++ до того, как C ++ 11 определили ключевое слово «export», [] , можно просто объявить шаблоны в файле заголовка и реализовать их в другом месте.
К сожалению, ни один из популярных компиляторов не реализовал это ключевое слово. Единственный, о котором я знаю, - это интерфейс, написанный Edison Design Group, который используется компилятором Comeau C ++. Все остальные настаивали на том, что вы пишете шаблоны в заголовочных файлах, нуждающихся в определении кода для надлежащего создания экземпляра (как уже указывали другие).
В результате стандартная комиссия ISO C ++ решила удалить export
особенность шаблонов, начинающихся с C ++ 11.
Если вы хотите использовать класс 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 используется для доступа и вызывать функции у родителя объекта.
blockquote>Или, в качестве альтернативы, если вы предпочитаете создать метод в дочернем классе, который заключает в себе родительский метод foo, а не доступ это путем создания экземпляра родительского класса с помощью вызова
super
в дочернем конструкторе:class Parent { foo() { console.log('foo!'); } } class Child extends Parent { method() { this.foo(); } } let c = new Child(); c.method();
Я не хочу, чтобы мой родительский класс был слишком длинным, поэтому я отделил некоторые методы от него
blockquote>Хорошо.
Итак, я создаю дочерний класс, однако я не хочу использовать дочерний класс в качестве экземпляра.
blockquote>Нет, подклассы - неправильный подход. Особенно, если вы не хотите создавать экземпляр подкласса, это даже не решение вашей проблемы.
Чтобы разделить блоки кода, разделите их на отдельные функции. Они не должны быть связаны с вызывающей стороной посредством наследования и вообще не должны быть методами класса. Просто напишите
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();