Значение виртуальных функций в C ++ - PullRequest
0 голосов
/ 13 мая 2018

Я изучаю C ++ и пришел к виртуальным функциям. Я узнал, что виртуальные функции объявлены в базовом классе и используются в производном классе. На основании определения я попытался сделать две простые программы. Пожалуйста, смотрите ниже:

В этой программе используется виртуальное ключевое слово:

#include <iostream>

using namespace std;

class Name {

    public :
            Virtual void myName() {
                cout << "My First Name is Varun" << endl ;
            }

};

class LName: public Name{

    public :
           void myName() {

               cout << "My Last Name is Srivastava" << endl;

           }

};

int main() {

    Name *name = new Name();
    name -> myName();
    LName *lname = new LName();
    lname -> myName();

    Name *nm;
    LName ln;

    nm = &ln;
    nm -> myName();
    ln.myName();


}

Выход:

My First Name is Varun
My Last Name is Srivastava
My Last Name is Srivastava
My Last Name is Srivastava

Ниже приведен пример без виртуального ключевого слова:

#include <iostream>

using namespace std;

class Name {

    public :
            void myName() {
                cout << "My First Name is Varun" << endl ;
            }

};

class LName: public Name{

    public :
           void myName() {

               cout << "My Last Name is Srivastava" << endl;

           }

};

int main() {

    Name *name = new Name();
    name -> myName();
    LName *lname = new LName();
    lname -> myName();

    Name *nm;
    LName ln;

    nm = &ln;
    nm -> myName();
    ln.myName();


}

Выход:

My First Name is Varun
My Last Name is Srivastava
My First Name is Varun
My Last Name is Srivastava

Здесь я вижу разницу, но я не могу понять, почему есть разница в выводе и что именно делает "виртуальное" ключевое слово.

...