c++知识点总结--静态与动态类型

对象的静态类型(static type),就是它在程序中被声明时所采用的类型

对象的动态类型(dynamic type)是指“目前所指对象的类型”

vitual 函数是动态绑定而来,调用一个virtual函数时,究竟调用哪一个函数实现,取决于发出调用的那个对象的动态类型

class Shape{
    public:
        enum ShapeColor{ Red, Green, Blue = 1, Org };
        void printColor(){
            cout << Red << Green << Blue << Org << endl;
        }
        virtual void draw(ShapeColor color = Red)const = 0;
    };
    class Rectangle :public Shape{
    public:
        virtual void draw(ShapeColor color = Green) const{
            cout << "this is rectangle,color is " << color << endl;
        }
    };
    class Circle :public Shape{
    public:
        virtual void draw(ShapeColor color)const{
            cout << "this is circle,color is " << color << endl;
        }
    };
    static void test(){
        Shape *ps;
        Shape *pc = new Circle;
        Shape *pr = new Rectangle;

        pc->draw();
        pr->draw();
    }
默认参数是静态绑定,pr输出值仍然是Shape的默认值
时间: 2024-12-15 23:09:34

c++知识点总结--静态与动态类型的相关文章

静态与动态类型

静态类型语言中,变量具有类型,而且在编译期确定,具有某一类型的变量只能持有相同类型的数据.动态类型语言中,变量没有类型,只有数据有类型,变量可以持有任意类型的数据.例如,C是静态类型语言,一个int型变量只能作为int来处理.Python是动态语言,变量可以持有整数.字符串.列表.闭包等任何数据. Java通常被认为是静态语言,然而准确来说并非如此.Java的变量有类型,但是变量可以持有子类型的数据,例如Animal变量可以持有Cat或者Dog,具体是什么类型,是由运行时的数据决定的.这显然是动

c++知识点总结--静态与动态联编

静态联编是指在编译阶段就将函数实现和函数调用关联起来,因此静态联编也叫早绑定,在编译阶段就必须了解所有的函数或模块执行所需要检测的信息,它对函数的选择是基于指向对象的指针(或者引用)的类型 动态联编是指在程序执行的时候才将函数实现和函数调用关联,因此也叫运行时绑定或者晚绑定,动态联编对函数的选择不是基于指针或者引用,而是基于对象类型,不同的对象类型将做出不同的编译结果.C++中一般情况下联编也是静态联编,但是一旦涉及到多态和虚拟函数就必须要使用动态联编了. 类与类指针 父类指针引用父类对象,完全

弱类型、强类型、动态类型、静态类型语言的区别是什么?

作者:amalgamation链接:https://www.zhihu.com/question/19918532/answer/21647195来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1. 先定义一些基础概念 Program Errors trapped errors.导致程序终止执行,如除0,Java中数组越界访问 untrapped errors. 出错后继续执行,但可能出现任意行为.如C里的缓冲区溢出.Jump到错误地址 Forbidden Beh

动态类型

作者:rainoftime链接:http://www.zhihu.com/question/19918532/answer/21647195来源:知乎著作权归作者所有,转载请联系作者获得授权. 类型系统的一些概念,众说纷纭,使用上也比较乱.有些东西,甚至不好严格定义.以下算学术界的一种相对“严格”的说法. 1. 先定义一些基础概念 Program Errors trapped errors.导致程序终止执行,如除0,Java中数组越界访问 untrapped errors. 出错后继续执行,但可

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

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

静态、动态、强和弱类型

对于动态语言与静态语言的区分,套用一句流行的话就是:Static typing when possible, dynamic typing when needed. “动”或“静”,强调的是实施类型的时间,编译里就要确定类型的是静态类型,比如C/C++/JAVA/C#,运行时才实施类型的则是动态类型,比如VB/Python.          而“强”或“弱”刚强调实施类型的强度,强类型的语言,如C++等,变量的类型不可随意转换:而弱类型的语言,变量的类型可以随需要任意转换,而且通常都是隐式的.

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

装载: https://www.zhihu.com/question/19918532 弱类型: > "1"+2 '12' 强类型: >>> "1"+2 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: cannot concatenate 'str' and 'int' objects

OC 动态类型和静态类型

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

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

在C++当中:因为出现了继承: 继承导致对象的指针和引用具有两种不同的类型: 静态类型 和 动态类型 . 静态类型 :指针或者是引用声明时的类型. 动态类型 :由他实际指向的类型确定. class Base { } class Derived:public Base { } Base* base //base的静态类型是 Base* = new Derived;//base的动态类型是 Derived* Derived* derived //derived的静态类型是 Derived* = ne