Fråga : klassificera

varför är fodra derv.func (); kuggningar med kompilatorfel men det gillar line derv.func_1 (); Jag tänkte att metodförbigående bör fungera

class A
{
offentligt: utan laga kraft funktionellt för
() {printf (”\ n som är funktionell, baserar klassificerar \ n”);}
annullerar func_1 () {printf (” \ n func_1 \ n ");}
};

class B: offentliga A
{
public:
annullerar funktionell (int a) {}
för
}; huvudsaklig (int-argc, röding*argv [])
{derv för

int för
B;
derv.func_1 ();
derv.func (); något att säga för // kompilatorfel kräver 1 argument. retur 0 för

;
för
} " klar "

Svar : klassificera

Det är inte precis en åsidosättande - det är en kombination av en åsidosättande och en överbelastning som du gör.

Du har förbigått det funktionellt fungerar, inklusive alla dess överbelastningar. Du kan inte appellen any av as funktionella metoder från ett B anföra som exempel, sedan alla de döljas, genom att förbigå den funktionella metoden.

Detta skulle arbete though:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
klassificera A
{
  offentligt:
        utan laga kraft funktionellt (int a) {printf (”\ n som är funktionell, baserar klassificerar \ n”);}
         utan laga kraft func_1 () {printf (”\ n func_1 \ n”);}
};

klassificera B: offentligt A
{
offentligt:
      utan laga kraft funktionellt (int a) {  }
 
};



// eller denna:

klassificera A
{
  offentligt:
        utan laga kraft funktionellt () {printf (”\ n som är funktionell, baserar klassificerar \ n”);}
         utan laga kraft func_1 () {printf (”\ n func_1 \ n”);}
};

klassificera B: offentligt A
{
offentligt:
      utan laga kraft funktionellt () {A:: funktionellt (); }
      utan laga kraft funktionellt (int a) {  }
 
};
Andra lösningar  
 
programming4us programming4us