/ / Изпълнение на 2 абстрактни класа с обща функция? - c ++

Въвеждане на 2 абстрактни класа с обща функция? - c ++

Какво се случва, когато даден клас наследява от няколко абстрактни класа, когато 2 или повече от тях имат функция със същото име, тип на връщане и аргументи?

Ако приемем, че всички функции тук са виртуални

Благодаря

клас С наследява от А и Б в същото време и двете A & B имат виртуални void func (int h);

Отговори:

2 за отговор № 1

Ако това е това, което имате предвид,

#include <iostream.h>
class A
{
public:
virtual void a_show()=0;
virtual void show()
{
cout<<"A";
}
};
class B
{
public:
virtual void b_show()=0;
virtual void show()
{
cout<<"B";
}
};
class C : public A, public B
{
virtual void a_show()
{}
virtual void b_show()
{}
};
void main()
{
C s;
s.show();
}

Кодът дава грешка с VC ++ подобен

error C2385: "C::show" is ambiguous

Трябва да декларирате показване по следния начин:

#include <iostream.h>
class A
{
public:
virtual void a_show()=0;
virtual void show()
{
cout<<"A";
}
};
class B
{
public:
virtual void b_show()=0;
virtual void show()
{
cout<<"B";
}
};
class C : public A, public B
{
public:
virtual void a_show()
{}
virtual void b_show()
{}
void show()
{
cout<<"C";
}
};
void main()
{
C s;
s.show();
}

Това със сигурност ще даде C


0 за отговор № 2

C ++ също така позволява да изберете наследствена функция на виртуалния член (IVMF), така че не е нужно да заменяте IVMF. Заедно с примера от mihsathe можем да направим следното:

клас C: публичен A, публичен B {  публичния:  virtual void a_show () {}  virtual void b_show () {}  използвайки B :: показва; // използвайки A: показване; // Ако искате да използвате show () от A };