Home Backend Development C#.Net Tutorial Constructor cannot be virtual function

Constructor cannot be virtual function

Dec 20, 2016 pm 04:48 PM
.net

The reasons why constructors cannot be declared as virtual functions:

1. The so-called virtual function means that only one is executed in polymorphic situations. From the concept of inheritance, the parent class object is always constructed first, and then the subclass object can be used. If the constructor is set to a virtual function, then you have to explicitly call the constructor when constructing the constructor of the parent class. Another reason is to prevent errors from happening. Imagine if you accidentally override it in the subclass If you create a function that is the same as the parent class constructor, then your parent class constructor will be overwritten, that is, the construction of the parent class cannot be completed, and an error will occur. public

class B: public A

{
​​ public:
​​B( )
                                                                                                         Derived class inheritance results in polymorphism. In the constructor of the derived class, the compiler will add the code to construct the base class. If the constructor of the base class uses parameters, the derived class must provide parameters for the base class in its constructor. , this is the reason, the reason is a bit convoluted, that is, if the constructor of the derived class must be exactly the same as the parent class, this is obviously unrealistic

Of course there are other explanations: 1. From the perspective of storage space, virtual functions Corresponds to a vtable, but this vtable is actually stored in the memory space of the object. The problem arises. If the constructor is virtual, it needs to be called through the vtable, but the object has not been instantiated, that is, there is no memory space, and the vtable cannot be found, so the constructor cannot be a virtual function.

2. From the perspective of usage, virtual functions are mainly used to enable overloaded functions to be called accordingly when the information is incomplete. The constructor itself is to initialize the instance, so using virtual functions has no instance meaning. The first instance is not initialized, so how can it be polymorphic? The function of a virtual function is that when it is called through a pointer or reference of the parent class, it can become the member function that calls the subclass. The constructor is automatically called when an object is created, and cannot be called through a pointer or reference from the parent class. Therefore, it is stipulated that the constructor cannot be a virtual function.

3. From an implementation point of view, the vtable is created after the constructor is called, so the constructor cannot be a virtual function. From a practical point of view, the real type of the object cannot be determined when the constructor is called (subclasses need to call The constructor of the parent class), and the constructor provides initialization and is only executed once during the object's lifetime. It is not a dynamic behavior of the object, and there is no need to become a virtual function.



Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What are the employment prospects of C#? What are the employment prospects of C#? Oct 19, 2023 am 11:02 AM

Whether you are a beginner or an experienced professional, mastering C# will pave the way for your career.

Share several .NET open source AI and LLM related project frameworks Share several .NET open source AI and LLM related project frameworks May 06, 2024 pm 04:43 PM

The development of artificial intelligence (AI) technologies is in full swing today, and they have shown great potential and influence in various fields. Today Dayao will share with you 4 .NET open source AI model LLM related project frameworks, hoping to provide you with some reference. https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel is an open source software development kit (SDK) designed to integrate large language models (LLM) such as OpenAI, Azure

.NET performance optimization technology for developers .NET performance optimization technology for developers Sep 12, 2023 am 10:43 AM

If you are a .NET developer, you must be aware of the importance of optimizing functionality and performance in delivering high-quality software. By making expert use of the provided resources and reducing website load times, you not only create a pleasant experience for your users but also reduce infrastructure costs.

Performance differences between Java framework and .NET framework Performance differences between Java framework and .NET framework Jun 03, 2024 am 09:19 AM

In terms of high-concurrency request processing, .NETASP.NETCoreWebAPI performs better than JavaSpringMVC. The reasons include: AOT early compilation, which reduces startup time; more refined memory management, where developers are responsible for allocating and releasing object memory.

C# .NET Interview Questions & Answers: Level Up Your Expertise C# .NET Interview Questions & Answers: Level Up Your Expertise Apr 07, 2025 am 12:01 AM

C#.NET interview questions and answers include basic knowledge, core concepts, and advanced usage. 1) Basic knowledge: C# is an object-oriented language developed by Microsoft and is mainly used in the .NET framework. 2) Core concepts: Delegation and events allow dynamic binding methods, and LINQ provides powerful query functions. 3) Advanced usage: Asynchronous programming improves responsiveness, and expression trees are used for dynamic code construction.

Advanced C# .NET Tutorial: Ace Your Next Senior Developer Interview Advanced C# .NET Tutorial: Ace Your Next Senior Developer Interview Apr 08, 2025 am 12:06 AM

Interview with C# senior developer requires mastering core knowledge such as asynchronous programming, LINQ, and internal working principles of .NET frameworks. 1. Asynchronous programming simplifies operations through async and await to improve application responsiveness. 2.LINQ operates data in SQL style and pay attention to performance. 3. The CLR of the NET framework manages memory, and garbage collection needs to be used with caution.

C# .NET: Exploring Core Concepts and Programming Fundamentals C# .NET: Exploring Core Concepts and Programming Fundamentals Apr 10, 2025 am 09:32 AM

C# is a modern, object-oriented programming language developed by Microsoft and as part of the .NET framework. 1.C# supports object-oriented programming (OOP), including encapsulation, inheritance and polymorphism. 2. Asynchronous programming in C# is implemented through async and await keywords to improve application responsiveness. 3. Use LINQ to process data collections concisely. 4. Common errors include null reference exceptions and index out-of-range exceptions. Debugging skills include using a debugger and exception handling. 5. Performance optimization includes using StringBuilder and avoiding unnecessary packing and unboxing.

From Web to Desktop: The Versatility of C# .NET From Web to Desktop: The Versatility of C# .NET Apr 15, 2025 am 12:07 AM

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

See all articles