Q:

C++ Virtual Functions | Find output programs | Set 2

belongs to collection: C++ find output programs

0

This section contains the C++ find output programs with their explanations on C++ Virtual Functions (set 2).

Program 1:

#include <iostream>
#include <string.h>
using namespace std;

class A {
public:
    void fun()
    {
        cout << "A::fun() called" << endl;
    }
};

class B : public A {
public:
    virtual void fun()
    {
        cout << "B::fun() called" << endl;
    }
};

int main()
{
    A ob1;
    B ob2, *p;

    p = &ob1;
    p->fun();

    p = &ob2;
    p->fun();

    return 0;
}

Program 2:

#include <iostream>
#include <string.h>
using namespace std;

class A {
public:
    void fun()
    {
        cout << "A::fun() called" << endl;
    }
};

class B : public A {
public:
    virtual void fun()
    {
        cout << "B::fun() called" << endl;
    }
};

int main()
{
    A ob1, *p;
    B ob2;

    p = &ob1;
    p->fun();

    p = &ob2;
    p->fun();

    return 0;
}

Program 3:

#include <iostream>
#include <string.h>
using namespace std;

class A {
public:
    pure virtual void fun();
};

class B : public A {
public:
    void fun()
    {
        cout << "B::fun() called" << endl;
    }
};

class C : public A {
public:
    void fun()
    {
        cout << "C::fun() called" << endl;
    }
};

int main()
{
    A* p;
    B ob2;
    C ob3;

    p = &ob2;
    p->fun();

    p = &ob3;
    p->fun();

    return 0;
}

Program 4:

#include <iostream>
#include <string.h>
using namespace std;

class A {
public:
    virtual void fun() = 0
    {
        cout << "A::fun() called" << endl;
    }
};

class B : public A {
public:
    void fun()
    {
        cout << "B::fun() called" << endl;
    }
};

class C : public A {
public:
    void fun()
    {
        cout << "C::fun() called" << endl;
    }
};

int main()
{
    A* p;
    B ob2;
    C ob3;

    p = &ob2;
    p->fun();

    p = &ob3;
    p->fun();

    return 0;
}

Program 5:

#include <iostream>
#include <string.h>
using namespace std;

class A {
public:
    virtual void fun() = 0;
};

class B : public A {
public:
    void fun()
    {
        cout << "B::fun() called" << endl;
    }
};

class C : public A {
public:
    void fun()
    {
        cout << "C::fun() called" << endl;
    }
};

int main()
{
    A* p;
    B ob2;
    C ob3;

    p = &ob2;
    p->fun();

    p = &ob3;
    p->fun();

    return 0;
}

All Answers

need an explanation for this answer? contact us directly to get an explanation for this answer

Answer Program  1:

Output:

main.cpp: In function ‘int main()’:
main.cpp:26:9: error: invalid conversion from ‘A*’ to ‘B*’ [-fpermissive]
     p = &ob1;
         ^~~~

Explanation:

The above code will generate an error, because if we want to implement the concept of dynamic binding then we need to create the virtual function in the base class. and also we can call functions using the base class pointer.

Answer Program 2:

Output:

A::fun() called
A::fun() called

Explanation:

Let's understand the above program. In the above program, we created two classes A and B. Both contain the function with the same name that is fun(). Class A inherited in class B.

Now look to the main() function, here we created object “ob1” and a pointer “p” of class A. and we created object ob2 of class B.

First, we assigned the address of "ob1" to pointer "p" then it will call function fun() of class A, then we assigned the address of "ob2" to the pointer "p" then it will again call function fun() of class A. because Here we created the virtual function in the child class then it will useless and perform the static binding.

Answer Program 3:

Output:

main.cpp:7:5: error: ‘pure’ does not name a type
     pure virtual void fun();
     ^~~~
main.cpp: In function ‘int main()’:
main.cpp:33:8: error: ‘class A’ has no member named ‘fun’
     p->fun();
        ^~~
main.cpp:36:8: error: ‘class A’ has no member named ‘fun’
     p->fun();
        ^~~

Explanation:

The above program will generate syntax error because we used the wrong syntax to declare the pure virtual function, the "pure" is an invalid word, it is not a keyword; the declaration of a pure virtual function is given below:

virtual void fun()=0;

Answer Program 4:

Output:

main.cpp:7:24: error: pure-specifier on function-definition
     virtual void fun() = 0
                        ^

Explanation:

The above program will generate a compilation error, we tried to create a pure virtual function, we cannot define the pure virtual function, we can only declare the pure virtual function and it can be overridden in child class. 

We can declare pure virtual function like:

virtual void fun()=0;

Answer Program 5:

Output:

B::fun() called
C::fun() called

Explanation:

Let's understand the above program. Here we created classes A, B, and C. 

Class A contains the pure virtual function fun() and we inherit class A into B and C. Both B and C also contain a function with the same name.

Now look to the main() function, here we created object a pointer “p” of class A. and we created object ob2 of class B and object ob3 of class C..

First, we assigned the address of "ob2" to pointer "p" then it will call function fun() of class B, then we assigned the address of "ob3" to the pointer "p" then it will call function fun() of class C. because Here we created the pure virtual function in the parent class A then it will perform the dynamic binding.

need an explanation for this answer? contact us directly to get an explanation for this answer

total answers (1)

C++ find output programs

This question belongs to these collections

Similar questions


need a help?


find thousands of online teachers now
C++ Virtual Functions | Find output programs | Set... >>
<< C++ Virtual Functions | Find output programs | Set...