首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++使用new来初始化指向指针

C++使用new来初始化指针 1.ClassName * p = new ClassName; 调用默认构造函数。...如果类里没有写默认构造函数,会使用编译器帮我们生成,但不会初始化成员变量,如 class NoConstructor    //没写构造函数 { public:     ~NoConstructor...C++指针初始化问题 c++中指针是一个很经典用法,但是也是最容易出错,比如定义了一个指针,必须对其进行初始化,不然这个指针指向是一个未知内存地址,后续对其操作时候,会报错。...c++指针初始化一般方法 1.将一个已经在内存中存在变量地址传递给定义指针 这个指针指向这个变量内存地址(相同数据类型),完成初始化。...delete释放其实只是释放了申请这块内存空间,但是指针并没有没撤销,指针还是指向这块地址,但是不可用(靠人品吃饭有可能可以用),是非法

33420

【C++】多态 ⑧ ( 验证指向 虚函数表 vptr 指针 | 对比定义了虚函数和没有定义虚函数大小 )

对比 定义了 虚函数 与 没有定义虚函数 大小 , 其它成员都相同 , 定义了虚函数多出了 4 字节 , 多出 4 字节就是 vptr 指针占用内存空间 ; 一、验证指向 虚函数表...存储到 " 虚函数表 " 中 ; 虚函数表 创建 : 在 使用 virtual 关键字 声明 虚函数 时 , C++ 编译器 会自动为该类生成 " 虚函数表 " ; 生成虚函数表前提是 至少有...虚函数指针 : " 虚函数表 " 是 存储 " 成员函数指针 " 数据结构 , 是一个 函数指针数组 , 数组中元素都是函数指针 , 具体存储都是 指向 虚函数 指针 ; 如果 子类...中 , 重写了 父 virtual 虚函数 , 那么 C++ 编译器会在 子类 虚函数表 中放入该 子类虚函数 函数指针 ; 如果 C++ 中存在 virtual 虚函数 , 在创建对象时 ,...Child 子类对象时 // 发现有 virtual 虚函数 会创建 虚函数表 // 在对象中使用 vptr 指针指向 虚函数表 首地址 Child c; // 将父指针指向子类对象 p

18540
您找到你想要的搜索结果了吗?
是的
没有找到

C++学习知识点

OOP面向对象程序设计多态理解 答:多态:同一操作作用于不同对象,可以有不同解释,产生不同执行结果。在运行时,可以通过指向指针,来调用实现派生方法。...C++中,实现多态有以下方法:虚函数,抽象,重载,覆盖,模板。 2.特征 答:封装、继承和多态。 3. C++与C#区别 (1)C++中申明时,不能给数据成员赋值,通常使用构造函数来完成。...(3)尽量将基析构函数定义为虚函数,当利用delete删除一个指向派生定义对象指针时,系统会调用相应析构函数。而不将析构函数定义为虚函数时,只调用基析构函数。...C++中接口就是成员虚函数。实现多态性,通过指向派生指针,访问派生中同名重定义成员虚函数。 9....对象赋给另外一个对象引用或者指针时,如何传递 当对象赋给另外一个对象引用或者对象时候,将调用被赋值拷贝构造函数。此时就存在深拷贝和浅拷贝。

1.7K20

领悟面向对象就离开发应用不远了(提高)有你对面向对象所有疑问,爆肝1w字

文章目录 前言 一、面向对象 二、使用 1.基础使用 2.运算符重载 3.友元 1.友元函数 2.友元 3.友元成员函数 三、继承 基 派生 插个访问权限事情 2.多态 ***公有 **...2.运算符重载 首先我们明确一点,运算符重载是c++多态一种形式,我们来类比与函数重载来看:同名函数来完成相同基本操作,即使被利用与不同数据类型,运算符重载也差不多 例如:运算符“ * ”一样在指针中用来解引用...平常不用,但是有一种地方用了更好:公有方法提供了唯一访问途径,但是有时候不太适用于特定问题,友元就出现了 1.友元函数 可以看为扩展接口,直接用吧: //创建友元函数是将其放入声明中 class...虚函数 虚函数源于c++中继承,是多态一种。在c++中,一个基指针或者引用可以指向或者引用派生对象。同时,派生可以重写基成员函数。...② 之间应满足子类型关系,通常表现为一个从另一个公有派生而来。 ③ 必须先使用指针指向子类型对象,然后直接或者间接使用指针调用虚函数。

51020

C++ 面试必备:常见 C++ 面试题汇总及详细解析

运算符重载 C++ 允许对运算符进行重载,可以使得运算符在处理特定类型数据时更具有描述性。而 C 不支持运算符重载。什么是指针?...感兴趣同学可以看我之前帖子,有详细介绍 如何避免野指针? 野指针是指指向已经被释放或者无效内存空间指针,这是 C++ 中常见一个程序错误。...C++多态是指在继承关系中,子类可以重写父虚函数,从而使得一个指向子类对象指针能够调用子类函数而不是父函数。其底层原理涉及到虚函数表、虚指针等概念。...数组解引用 可以通过数组下标访问数组元素,也可以使用指针进行访问,但是需要注意是,使用指针访问数组元素需要先将指针解引用,即使用 * 运算符。例如:*p 表示 p 指向对象。...static对象在使用之前分配,程序结束时销毁;栈和静态内存对象由编译器自动创建和销毁。

1.9K30

CC++面试常问题集(2)

多态 同一操作作用于不同对象,可以有不同解释,产生不同执行结果,这就是多态性。简单说:就是用基指针或引用指向子类对象。...C++多态性具体体现在运行和编译两个方面: (1)在程序运行时多态性通过继承和虚函数来体现; (2)在程序编译时多态性体现在函数和运算符重载上; 虚函数 使用virtual关键字声明是虚函数...image.png 接口用来表达一种能力或协议。 传参是子类。 可以使用接口指针指向其子类对象,并调用子类对象中实现接口中纯虚函数。 不能使用接口实例化对象。...只有虚函数才使用是动态绑定,其他全部是静态绑定 11、指针和引用定义和性质区别: 指针和引用存放都是所指对象地址 (1)指针指针是一个变量,只不过这个变量存储是一个地址,指向内存一个存储单元...是C++运算符; 对于非内部数据类型对象(自己声明对象)而言,光用maloc/free无法满足动态对象要求,对象在创建同时要自动执行构造函数,对象在消亡之前要自动执行析构函数,由于malloc

1.1K10

C++之面向对象三个基本特征

如果在派生中没有对基虚函数重新定义,则派生简单地继承其直接基虚函数。 定义一个指向对象指针变量,并使它指向同一族中需要调用该函数对象。...通过该指针变量调用此虚函数,此时调用就是指针变量指向对象同名函数。 通过虚函数与指向对象指针变量配合使用,就能方便地调用同一族中不同类同名函数,只要先用基指针指向即可。...,这并不是多态性行为(使用是不同类型指针),没有用到虚函数功能。...因为在执行构造函数前对象尚未创建完成,虚函数表尚不存在,也没有指向虚函数表指针,所以此时无法查询虚函数表,也就不知道要调用哪一个构造函数。下节会讲解虚函数表概念。...在 main 函数中,定义了基类型指针 p,并指向派生对象,然后希望用 delete 释放 p 所指向空间。

1.1K60

【C 语言】字符串拷贝 ( 函数形参使用推荐方法 | 凡是涉及 修改指针指向 操作一律创建 指针变量 执行 | 引入 辅助 局部 指针变量 )

文章目录 一、函数形参使用推荐方法 二、完整代码示例 一、函数形参使用推荐方法 ---- 在函数中 , 形参 中 指针变量 , 不建议直接使用 ; 推荐 在 函数中 , 定义 局部 指针变量 , 接收...形参中 指针变量 , 具体操作是 函数中 定义 局部指针变量 ; 直接使用 *to_tmp++ 样式代码 , 会改变指针指向 , 有可能会导致错误 , 一旦出错 , 根本无法排查 ; 如果 将...辅助 局部变量 , 接收 函数 形参变量 ; 凡是涉及 修改指针指向 操作一律创建 指针变量 执行 ; 代码示例 : /* * 实现字符串拷贝 ( 实现了模块化 ) * 将 from...指针指向字符串 拷贝到 to 指针指向字符串换 */ void str_copy(char *from, char *to) { // 使用局部变量 接收 形参 char *from_tmp...拷贝到 to 指针指向字符串换 */ void str_copy(char *from, char *to) { // 使用局部变量 接收 形参 char *from_tmp =

86210

C++经典面试题(最全,面中率最高)

如果你在用delete时没用括号,delete就会认为指向是单个对象,否则,它就会认为指向是一个数组。 3.C++有哪些性质(面向对象特点) 封装,继承和多态。...C++多态性具体体现在运行和编译两个方面:在程序运行时多态性通过继承和虚函数来体现; 在程序编译时多态性体现在函数和运算符重载上; 虚函数:在基中冠以关键字 virtual 成员函数。...抽象必须用作派生其他,而不能用于直接创建对象实例。但仍可使用指向抽象指针支持运行时多态性。...对于返回一个流指针则不能连续使用<<操作符。因此,返回一个流对象引用是惟一选择。这个唯一选择很关键,它说明了引用重要性以及无可替代性,也许这就是C++语言中引入引用这个概念原因吧。 赋值操作符=。...数组要么在静态存储区被创建(如全局数组),要么在栈上被创建指针可以随时指向任意类型内存块。

1.1K30

c++面试选择题_C语言经典笔试题

C++多态性具体体现在运行和编译两个方面: 在程序运行时多态性通过继承和虚函数来体现; 在程序编译时多态性体现在函数和运算符重载上; 虚函数:在基中冠以关键字 virtual 成员函数。...从基继承来纯虚函数,在派生中仍是虚函数。 抽象中不仅包括纯虚函数,也可包括虚函数。抽象必须用作派生其他,而不能用于直接创建对象实例。但仍可使用指向抽象指针支持运行时多态性。...对于返回一个流指针则不能连续使用<<操作符。因此,返回一个流对象引用是惟一选择。这个唯一选择很关键,它说明了引用重要性以及无可替代性,也许这就是C++语言中引入引用这个概念原因吧。...数组要么在静态存储区被创建(如全局数组),要么在栈上被创建指针可以随时指向任意类型内存块。...生命周期不同: 全局变量随主程序创建创建,随主程序销毁而销毁;局部变量在局部函数内部,甚至局部循环体等内部存在,退出就不存在; 使用方式不同:通过声明后全局变量程序各个部分都可以用到;局部变量只能在局部使用

1.1K10

基础知识_Cpp

编译时多态是怎样 2.5. 成员权限控制 2.6. struct和class区别 2.7. Cpp中如何禁止一个创建对象 2.8. 如何限制只能在堆或栈上创建对象 2.9....虚函数是实现运行时多态一种机制,比如两个父指针分别指向子类A和子类B实例,父指针调用虚函数时,会根据不同子类来调用不同函数。...如何限制只能在堆或栈上创建对象 1.编译器在为对象分配栈空间时,会先检查析构函数访问性,其实不光是析构函数,只要是非静态函数,编译器都会进行检查。...在一个有指针对象中至少要实现哪三个函数 拷贝构造函数、拷贝赋值运算符、析构函数 如果没有实现拷贝赋值运算符可能会遇到什么问题(深拷贝、浅拷贝) 浅拷贝,只拷贝指针值,深拷贝会再开辟一块新空间,连同指针在堆中指向内容一块拷贝过去...再就是函数返回值也要用到指针指向类型时,仅利用模板参数推导是做不到如何实现?

1.9K30

硬核 | C++ 基础大全

访问"不安全可控"(invalid)内存区域将导致"Undefined Behavior"。 如何避免使用指针?在平时编码中,养成在定义指针后且在使用之前完成初始化习惯或者使用智能指针。...后续如果有一个基类型指针指向派生,那么当调用虚函数时,就会根据所指真正对象虚函数表指针去寻找虚函数地址,也就可以调用派生虚函数表中虚函数以此实现多态。...; 之间应满足子类型关系,通常表现为一个从另一个公有派生而来; 必须先使用指针指向子类型对象,然后直接或间接使用指针调用虚函数; 什么是继承?...如果析构函数执行不全,就是没有完成他应该执行每一件事情。 如何实现只能静态分配和只能动态分配 前者是把 new、delete 运算符重载为 private 属性。...A(); 动态建立一个对象,就是使用 new 运算符为对象在堆空间中分配内存。

1.2K10

【C++】运算符重载案例 - 字符串 ③ ( 重载 左移 << 运算符 | 自定义使用技巧 | 直接访问私有指针成员 | 为指针分配指定大小内存并初始化 0 )

一、重载 左移 << 运算符 1、左移 << 运算符作用 左移运算符重载 , 可参考 【C++】运算符重载 ⑧ ( 左移运算符重载 | 友元函数 / 成员函数 实现运算符重载 | 对象 使用 左移运算符...m_p 指针指向数据输出到 out 输出流中 out << s.m_p << endl; // 该返回值还需要当左值使用 return out; } 同时 , 还要在 String 中 ,...ostream& operator<<(ostream& out, String& s); } 二、自定义使用技巧 ---- 1、直接访问私有指针成员 在开发中 , 自定义了一个 class ...则创建一个空字符串 , 指针指向内存空间大小为 1 , 只存放一个 ‘\0’ 字符 , 表示字符串结尾 ; 如果 参数 大于 0 , 为 字符串指针 分配 该大小 + 1 内存空间 , 然后将这块内存空间赋值...m_p 指针指向数据输出到 out 输出流中 out << s.m_p << endl; // 该返回值还需要当左值使用 return out; } 3、Test.cpp 测试 #include

14710

C++中四种多态

本文转载自The Four Polymorphisms in C++ C++中四种多态 当人们谈论C ++中多态性时,通常是指通过基指针或引用使用派生事情,这称为子类型多态性。...通过基指针和引用使用派生能力。 这是一个例子。 假设您有各种猫科动物,例如这些猫科动物, ?...cat,tiger和ocelot指针传递给do_meowing函数,该函数期望指向Felid指针。...但是,请注意,它不适用于指针类型,因为比较指针会比较内存位置而不是内容。 为了使它适用于指针,您必须专门针对指针类型使用模板,该模板不再是参数多态性,而是ad-hoc多态性。...同样,如果类为T类型定义了转换运算符,则可以在需要T类型任何地方使用它。

1.3K20

C语言与C++面试知识总结

const 指针与引用 指针 指向常量指针(pointer to const) 自身是常量指针(常量指针,const pointer) 引用 指向常量引用(reference to const)...inline virtual 唯一可以内联时候是:编译器知道所调用对象是哪个(如 Base::who()),这只有在编译器具有实际对象而不是对象指针或引用时才会发生。...位域在内存中布局是与机器有关 位域类型必须是整型或枚举类型,带符号类型中位域行为将因具体实现而定 取地址运算符(&)不能作用于位域,任何指针都无法指向位域 extern "C" 被 extern...虚函数指针、虚函数表 虚函数指针:在含有虚函数对象中,指向虚函数表,在运行时确定。...虚函数表:在程序只读数据段(.rodata section,见:目标文件存储结构),存放虚函数指针,如果派生实现了基某个虚函数,则在虚表中覆盖原本基那个虚函数指针,在编译时根据声明创建

4.9K41

什么?CC++面试过不了?因为你还没看过这个!

const 作用 修饰变量,说明该变量不可以被改变; 修饰指针,分为指向常量指针(pointer to const)和自身是常量指针(常量指针,const pointer); 修饰引用,指向常量引用...inline virtual 唯一可以内联时候是:编译器知道所调用对象是哪个(如 Base::who()),这只有在编译器具有实际对象而不是对象指针或引用时才会发生。...位域在内存中布局是与机器有关 位域类型必须是整型或枚举类型,带符号类型中位域行为将因具体实现而定 取地址运算符(&)不能作用于位域,任何指针都无法指向位域 extern "C" 被 extern...虚函数指针、虚函数表 虚函数指针:在含有虚函数对象中,指向虚函数表,在运行时确定。...虚函数表:在程序只读数据段(.rodata section,见:目标文件存储结构),存放虚函数指针,如果派生实现了基某个虚函数,则在虚表中覆盖原本基那个虚函数指针,在编译时根据声明创建

3.6K50

【C++】C++核心编程部分-内存分区模型-引用-函数提高-与对象-文件操作

C++通过提供特殊对象指针,this指针,解决上述问题。 this指针指向被调用成员函数所属对象。 (谁调,this就指向谁) this指针是隐含每个非静态成员函数内一种指针。...草泥马继承动物数据继承了两份,其实我们应该清楚,这份数据我们只需要一份就可以。 vbptr——虚基 继承了两个指针,两个指针通过偏移量找到了唯一数据。...利用虚继承可以解决菱形继承问题——virtual 多态 多态是C++面向对象三大特性之一 多条基本概念 多态分为两种 静态多态:函数重载和运算符重载属于静态多态,复用函数名 动态多态:派生和虚函数实现运行时多态.../重写要求:函数返回值类型 函数名 参数列表 完全相同 //动态多态使用 /* 父指针或者引用 指向子类对象//Animal &animal = cat; */ void doSpeak(Animal...有继承关关系 子类重写父虚函数 多态使用条件 父指针或引用指向子类对象 重写:函数返回值类型 函数名 参数列表 完全一致称为重写 多态原理剖析 虚函数(表)指针 vfptr v -

1.8K00

1小时精通c++面向对象编程

五、多态性和虚函数 5.1 多态性 发出同样消息被不同类型对象接受导致完全不同行为 多态可分为:静态多态性与动态多态性(必须存在于继承环境之中) 5.1.1 函数重载 在中,构造函数可以重载,...图5-2 运算符重载 5.1.4 重载为成员函数 重载一元运算符,不再显式说明参数 重载二元运算符,只显式说明一个参数;该参数为操作数右操作数,左操作数由this指针指向调用该成员函数对象)提供...图5-5 静态联编 从示例可以看出,通过对象指针进行普通成员函数调用,仅仅与指针类型有关,而与此刻指针指向什么对象无关。...动态联编优点是灵活性强,但效率低 实现动态联编需要同时满足以下三个条件: 1必须把动态联编行为定义为虚函数 2之间应满足子类型关系,通常表现为一个从另一个公有派生而来 3必须先使用指针指向子类型对象...,然后直接或者间接使用指针调用虚函数 5.3.1 动态联编示例 ?

82030

C++笔试面试题整理

这就是说,你能用dynamic_cast把指向指针或引用转换成指向其派生或其兄弟指针或引用,而且你能知道转换是否成功。...因此,使用reinterpret_casts代码很难移植。reinterpret_casts最普通用途就是在函数指针类型之间进行转换。 什么是封装?C++中是如何实现?...对于返回一个流指针则不能连续使用<<操作符。因此,返回一个流对象引用是惟一选择。这个唯一选择很关键,它说明了引用重要性以及无可替代性,也许这就是C++语言中引入引用这个概念原因吧。 赋值操作符=。...事实上,如果一个中含有虚函数,则系统会为这个分配一个指针成员指向一张虚函数表(vtbl),表中每一项指向一个虚函数地址,实现上就是一个函数指针数组。 什么是多态?...谈谈你对指针理解? 指针是一个变量,该变量专门存放内存地址; 指针变量类型取决于其指向数据类型,在所指数据类型前加* 指针变量特点是它可以访问所指向内存。

2.5K30
领券