Как вызвать функцию родительского класса из производной функции класса?

вы также можете использовать это:

import requests
from bs4 import BeautifulSoup
import csv

url = "http://58.68.130.147/"
r = requests.get(url)
data = r.text

soup = BeautifulSoup(data, "html.parser")
get_details = soup.find_all("input", attrs={"name":"stainfo"})

for val in get_details:
    get_val = val["value"]
    print(get_val)
540
задан Paul Renton 2 May 2014 в 23:43
поделиться

4 ответа

Я рискну утверждения очевидного: Вы вызываете функцию, если она определяется в базовом классе, это автоматически доступно в производном классе (если это не private).

, Если существует функция с той же подписью в производном классе, можно снять неоднозначность его путем добавления имени базового класса, сопровождаемого двумя двоеточиями base_class::foo(...). Необходимо отметить, что в отличие от Java и C#, C++ делает не , имеют ключевое слово для "базового класса" (super или base) начиная с поддержек C++ множественное наследование , который может привести к неоднозначности.

class left {
public:
    void foo();
};

class right {
public:
    void foo();
};

class bottom : public left, public right {
public:
    void foo()
    {
        //base::foo();// ambiguous
        left::foo();
        right::foo();

        // and when foo() is not called for 'this':
        bottom b;
        b.left::foo();  // calls b.foo() from 'left'
        b.right::foo();  // call b.foo() from 'right'
    }
};

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

class bottom : public left, public left { // Illegal
};
687
ответ дан Jarek C 2 May 2014 в 23:43
поделиться

Учитывая родительский класс, названный Parent и дочерний класс, названный Child, можно сделать что-то вроде этого:

class Parent {
public:
    virtual void print(int x);
}

class Child : public Parent {
    void print(int x) override;
}

void Parent::print(int x) {
    // some default behavior
}

void Child::print(int x) {
    // use Parent's print method; implicitly passes 'this' to Parent::print
    Parent::print(x);
}

Примечание, что Parent подлинное имя класса и не ключевое слово.

175
ответ дан Greg Hewgill 2 May 2014 в 23:43
поделиться

Если Ваш базовый класс называют Base, и Ваша функция вызвана FooBar(), можно назвать его непосредственно использованием Base::FooBar()

void Base::FooBar()
{
   printf("in Base\n");
}

void ChildOfBase::FooBar()
{
  Base::FooBar();
}
30
ответ дан TankorSmash 2 May 2014 в 23:43
поделиться

В MSVC для этого есть специальное ключевое слово Microsoft: __ super


MSDN: Позволяет вам явно указать, что вы вызываете реализацию базового класса для функции, которую вы переопределяете.

// deriv_super.cpp
// compile with: /c
struct B1 {
   void mf(int) {}
};

struct B2 {
   void mf(short) {}

   void mf(char) {}
};

struct D : B1, B2 {
   void mf(short) {
      __super::mf(1);   // Calls B1::mf(int)
      __super::mf('s');   // Calls B2::mf(char)
   }
};

24
ответ дан 22 November 2019 в 22:16
поделиться
Другие вопросы по тегам:

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