<!-- X-Subject-Header-End-->
<!-- X-Head-of-Message-->
-
From
: Rob Newberry <robnewberry at grouplogic dot com>
-
To
: Eddy Ilg <eddy at fericom dot net>
-
Cc
: gcc-help at gcc dot gnu dot org
-
Date
: Thu, 22 Nov 2001 12:58:25 -0500 (EST)
-
Subject
: Re: C++ - Calling virtual function from constructor
<!-- X-Head-of-Message-End--><!-- X-Head-Body-Sep-Begin-->
<!-- X-Head-Body-Sep-End--><!-- X-Body-of-Message-->
The reason you don't call virtual methods inside a constructor is because
you don't know what kind of object you are -- while you're in the process
of being constructed, you're still in a _somewhat_ indeterminate state.
Only after you are constructed are you a real object.
Here's an example:
class a
{
public:
a();
virtual void v_meth();
};
class b : public a
{
public:
b();
virtual void v_meth();
};
a::a()
{
// this will _always_ call a::v_meth, because
// at this point, that's what we are -- even
// if we're in the process of constructing a
// subclass of class a
v_meth();
}
void a::v_meth()
{
printf("a::v_meth\n");
}
b::b()
{
// likewise, this will always call b::v_meth,
// because at this point, that's what we are
v_meth();
}
void b::v_meth()
{
printf("b::v_meth\n");
}
main()
{
printf("constructing an a:\n");
a an_a;
printf("constructing a b:\n");
b a_b;
}
The output of this, with gcc, is:
constructing an a:
a::v_meth
constructing a b:
a::v_meth
b::v_meth
As you can see, when you are constructing the 'b' object a_b, the
constructor for 'a' and 'b' get called in succession. But the constructor
for 'a' calls 'v_meth', it ONLY calls the 'a' method, because at that
point, that's all the object it is. This might not be the behavior you
want to have, since you're constructing a 'b' object. That's why the
compiler complains about you calling a virtual method in a constructor.
Rob
---------------------------------------------------------------------
Rob Newberry
Director of Fajita Technology
Group Logic, Inc.
分享到:
相关推荐
Glaive-Function-Calling-V2函数调用数据集
标题中的"Python库 | joint-calling-0.1.88.tar.gz"表明这是一个与Python相关的库,且版本号为0.1.88,它被打包成一个tar.gz文件。这种格式通常用于在Unix/Linux环境中分发软件,因为它可以进行文件压缩并合并多个...
标题中的"PyPI 官网下载 | joint-calling-0.1.51.tar.gz"表明这是一个在Python Package Index(PyPI)上发布的软件包,名为`joint-calling`,版本为0.1.51,其打包形式是tar.gz。PyPI是Python开发者发布自己软件包的...
【标题解析】:“acs-voice-calling-quickstart-源码.rar”这个标题表明这是一个关于“ACS语音通话快速启动”的源代码压缩包。ACS(Azure Communication Services)是微软提供的一个通信平台服务,允许开发者轻松...
【app-app-calling-android-master源码】是一个针对Android平台的应用程序源码库,它提供了实现应用程序间通信(App-to-App Calling)的功能。这个源码项目对于开发者来说是一份宝贵的资源,可以帮助他们深入理解...
app-app-calling-android, 使用本教程构建应用Android调用应用程序的应用程序 #Build 一个简单的Android VoIP呼叫应用程序,带有 Sinch本教程将指导你构建一个简单的Android VoIP呼叫应用程序。 完成后,它将显示...
这个名为"method-calling.rar_in"的压缩包文件包含了一个关于Java方法调用的30个示例,旨在帮助学习者深入理解和掌握这一关键概念。以下是关于Java方法调用的一些详细知识点: 1. **方法定义**:在Java中,方法是一...
ARM DEN 0028E - SMC Calling Convention ARM DEN 0028E 是 Arm Limited 公司发布的一份关于 SMC 调用约定的文档,本文主要介绍了 SMC 和 HVC 调用约定的详细信息,包括 Secure Monitor Calls、Hypervisor Calls、...
标题中的“干货代码MATLAB控制CST进行建模仿真”表明了这个压缩包内容的核心,即使用MATLAB编程控制CST(Computer Simulation Technology)软件进行电磁仿真。MATLAB是一款强大的数学计算软件,广泛用于数值分析、...
资源分类:Python库 所属语言:Python 资源全名:joint-calling-0.1.18.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
1.WRITE JAVA CODE 2.COMPILE THE JAVA CODE 3.CREATE C/C++ HEADER 4.WRITE THE C/C++ CODE 5.RUN THE JAVA CODE (IF USING VISUAL STUDIO 2010 DONT HAVE TO CREATE SHARED LIB FILE, IT WILL DO IT FOR U)
《Calling C from IDL》是2002年发布的一份文档,主要探讨了如何在IDL(Interactive Data Language)环境中调用C和C++代码。IDL是一种强大的数据处理和可视化语言,广泛应用于科学计算和数据分析领域。而C和C++是...
在Spring Boot框架中,API调用通常涉及到服务之间的通信,这在微服务架构中尤为重要。本文将深入探讨如何在Spring Boot应用中实现API调用,包括客户端库的使用、RESTful API的设计原则以及错误处理策略。...
Calling this function releases all resources allocated by the libraries. This function delete all the reference or list objects that user has forgotten to delete. Parameters: In: None Out: ...
Wi-Fi通话技术是一种让移动设备在Wi-Fi网络覆盖范围内进行语音通话、视频通话以及发送短信的服务。本介绍主要聚焦于T-Mobile(TMO)和Sprint两家运营商的Wi-Fi通话实现,涵盖了用户体验、终端实现、IMS网络支持、SIP...
cd communication-services-web-calling-tutorial / Project 通过从Azure门户配置Azure通信服务资源来获取连接字符串。 将连接字符串用作config.json文件中键connectionString值。 npm安装 npm运行构建 npm运行...
<Project>> cd motw-calling dev_appserver.py . (如果您安装了适用于 Python 的 Google Cloud 工具) python -m SimpleHTTPServer 8080 (如果你没有安装 GCE for Python) 打开您最喜欢的浏览器并按照以下模式...
git clone https://github.com/davidecarlson/SARS-CoV2-variant-calling-example.git 第三步 使用提供的环境文件,使用此分析中所需的软件创建新的conda环境: conda env create -f environment.yaml 步骤4 从...
语音合成代码matlab 什么是COTOHA API? NTT集团开发的COTOHA API提供日语专用的自然语言处理。 看 COTOHA API能够执行各种任务(有关详细信息,请参见),并且一些高级功能包括 ...我相信这些功能可以完全发挥作用,...
"bonobo-calling-express:no黑猩猩电话快递" 是一个基于JavaScript的项目,看起来它正处于开发阶段(Work In Progress,简称WIP)。这个项目的标题可能是以一种幽默或创意的方式命名,暗示着该项目可能涉及某种形式...