Talk:Virtual class

Latest comment: 3 months ago by 2400:1A00:BB20:AEC7:454E:5FDE:4030:F4E4 in topic Virtual class

Example? edit

I have removed the C++ example which was in fact not valid C++ (there are no virtual classes in C++, only virtual functions and virtual base classes). Does anybody have a working example in a different language? Phst (talk) 11:57, 19 March 2015 (UTC)Reply

Phst There is no virtual base class, only virtual inheritance. Virtual inheritance--Diaspomod (talk) 12:57, 4 May 2019 (UTC)Reply


In my opinion, the title is wrong. Not the class itself can be virtual, just the class methods! I have removed the virtual modifier in the c ++ example and can now be compiled with the clang compiler (but not before). The complete article must be overwritten. Currently the nested class is extended without virtual functions! This is bad!--Diaspomod (talk) 12:14, 4 May 2019 (UTC)Reply


When I explicitly add the override modifier, the compiler complains about the non-virtual functions. As a conclusion, there is no such thing as a "virtual class" in C++.

#include <iostream>

class Machine {
public:
    void run() { }

    class Parts {
    public:
        virtual int get_wheels() = 0;
        
        virtual std::string get_fuel_type() = 0;
    };
};

class Car: Machine {
public:
    void run() { 
        std::cout << "The car is running." << std::endl; 
    }
    
    class Parts {
    public:
        // works only without assurance of "override"!
        int get_wheels() override {
            std::cout << "A car has 4 wheels." << std::endl;
            return 4;
        }
        
        // works only without assurance of "override"!
        std::string get_fuel_type() override {
            std::cout << "A car uses gasoline for fuel." << std::endl;
            return "gasoline";
        }
    };
};

This is the error message from clang that uses the explicit override modifier.

$ clang++ virtual_class.cpp -o virtual_class
virtual_class.cpp:24:26: error: only virtual member functions can be marked
      'override'
        int get_wheels() override {
                         ^~~~~~~~~
virtual_class.cpp:29:37: error: only virtual member functions can be marked
      'override'
        std::string get_fuel_type() override {
                                    ^~~~~~~~~
2 errors generated.

--Diaspomod (talk) 12:43, 4 May 2019 (UTC)Reply

We should delete this article or write that there are no virtual classes, just virtual methods in a class. In this fact, it does not matter if the class is nested or not.--Diaspomod (talk) 12:50, 4 May 2019 (UTC)Reply

Many academics writing independent reliable sources disagree with you. A couple of the many papers that write about this are doi:10.1145/74877.74919 and doi:10.1145/1111037.1111062. Phil Bridger (talk) 10:51, 3 February 2020 (UTC)Reply

Virtual class edit

What is vitual class 2400:1A00:BB20:AEC7:454E:5FDE:4030:F4E4 (talk) 12:04, 20 February 2024 (UTC)Reply