C++ 对象的静态类型与动态类型

在C++当中:因为出现了继承:

继承导致对象的指针和引用具有两种不同的类型: 静态类型 和 动态类型 。

静态类型 :指针或者是引用声明时的类型。

动态类型 :由他实际指向的类型确定。

class Base

{

}

class Derived:public Base

{

}

Base* base //base的静态类型是 Base*

= new Derived;//base的动态类型是 Derived*

Derived* derived //derived的静态类型是 Derived*

= new Derived;//derived的动态类型也是 Derived*

base = derived;//base的静态类型是一直是 Base*

//但是它的动态类型指向了Derived*

Base& base2 = *derived;//base2的静态类型是Base,动态类型是Derived

时间: 2024-10-14 10:37:18

C++ 对象的静态类型与动态类型的相关文章

强类型、弱类型、动态类型、静态类型语言

收集了一些关于编程语言分类的文章: 一. 作者:rainoftime链接:https://www.zhihu.com/question/19918532/answer/21647195来源:知乎 类型系统的一些概念,众说纷纭,使用上也比较乱.有些东西,甚至不好严格定义.以下算学术界的一种相对"严格"的说法. 1. 先定义一些基础概念 Program Errors trapped errors.导致程序终止执行,如除0,Java中数组越界访问 untrapped errors. 出错后继

强类型,弱类型,动态类型,静态类型

"C and C++ are considered weakly typed since, due to type-casting, one can interpret a field of a structure that was an integer as a pointer." 我当前使用的开发语言为C/C++,为弱类型语言,主要因为: 1. 一些编程语言(例如C/C++)将指针暴露为数字值,并允许用户对它们执行算术运算.这些语言有时被称为"弱类型",因为指针

简单理解弱类型、动态类型、解释型语言

弱类型和强类型 简单的说,二者的区别就是是否偏向于容忍隐式类型转换. $str = 'abc'; //str是一个字符串 $str = 1; //这时候又变成整形 if($str){}; //这时候又是一个布尔型 所以php是弱类型语言,变量类型会自动转换. 动态类型和静态类型 简单的说,二者的区别就是声明变量的时候是否需要指定变量类型. php是动态类型语言,声明变量时无需指定类型. 注意: 一个语言是不是强类型语言和是不是动态类型语言没有必然联系. 动态语言和静态语言 简单的说,二者的区别就

OC 动态类型和静态类型

多态 允许不同的类定义相同的方法 动态类型 程序直到执行时才能确定所属的类 静态类型 将一个变量定义为特定类的对象时,使用的是静态形态 将一个变量定义为特定类的对象时,使用的是静态类型,在编译的时候就知道这个变量所属的类,这个变量总是存储特定类的对象.使用静态类型时,编译器尽可能的确保变量的用法在程序中始终保持一致,编译器能够通过检查来确定应用于对象的方法是由该类定义的或者由该类继承的,否则就会显示警告,静态类型能够更好地在程序编译阶段就指出错误.并且使用静态类型可以提高程序的可读性 简单来说:

静态类型&动态类型

何时使用:使用存在继承关系的类型时,必须将一个变量或其他表达式的静态类型与该表达式表示对象的动态类型区分开来 静态类型:表达式的静态类型在编译时总是已知的,它是变量声明时的类型或表达式生成的类型 动态类型:动态类型直到运行时才可知,(变量或)表达式表示的内存中的对象的类型 如果表达式既不是引用也不是指针,则它的动态类型永远与静态类型一致. 如当print_total调用net_price时:double ret = item.net_price(n);,我们知道item的静态类型是Quote&,

动态语言、静态语言及动态语言的“鸭子类型“

动态语言与静态语言: 所谓动态和静态,是指程序中类型.类型又是指class,int等定义,比如变量的类型,函数的入参类型,返回值类型.动态类型语言,表示在编写程序的时候,无需制定类型,是运行时检查:静态类型语言,表示在编写程序的时候,需要显式地制定各种类型,在编译的时候就会被检查. 有人说静态类型语言叫强类型语言,是指需要进行变量/对象类型声明的语言,一般情况下需要编译执行. 例如C/C++/Java/C# 有人说动态类型语言叫弱类型语言,是指不需要进行变量/对象类型声明的语言,一般情况下不需要

静中有动-动态类型

在C#4.0中,最核心的特性莫过于动态类型的引入. 1.动态类型简介 一直在强调C#是一门静态类型的语言,因为它在定义变量时要明确给出变量的类型.例如在int i=5;这样的代码中,int就是变量i的类型,如果定义变量时没有明确指定变量的类型,则这样的代码是通过不了编译的. 在C#4.0中,微软引入了dynamic关键字来定义动态类型.当我们使用由dynamic关键字限制的变量时,编译器并不知道它的类型,该类型只能在程序运行的时候才能被确定.动态类型的定义如下面的代码所示: dynamic i=

C#学习笔记(十一):动态类型

C#是一门静态类型的语言,但是在C#4.0时微软引入了动态类型的概念. dynamic 关键字dynamic用来定义动态对象,我们来看一下动态类型的一些特性. 调用不同类的相同方法 我们有两个或多个不相关的类,然后运行时需要可以调用到相同名称的方法,如下: 1 using System; 2 3 namespace Study 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 dynamic obj = GetObje

OC 动态类型,动态绑定,动态加载

Objective-C具有相当多的动态特性,基本的,也是经常被提到和用到的有 动态类型(Dynamic typing) 动态绑定(Dynamic binding) 动态加载(Dynamic loading) 动态类型:程序直到执行时才能确定所属的类. id 数据类型id 通用的对象类型,可以存储任意类型的对象,id后面没有号,它本身就是个指针类似于void ,但只可以指向对象类型 静态类型与动态类型 编译期检查与运行时检查 静态类型在编译期就能检查出错误 静态类型声明代码可读性好 动态类型只有在