C++重要知识点小结---1

带硬约束的物理信息神经网络(PINN with Hard Constraint)示例及代码 本文以一个案例介绍了带硬约束的物理信息神经网络的原理及实现步骤。 阅读详情

C++重要知识点小结---1

1.C++中类与结构的唯一区别是:类(class)定义中默认情况下的成员是private的,而结构(struct)定义中默认情况下的成员是public的。

2. ::叫作用域区分符,指明一个函数属于哪个类或一个数据属于哪个类。::可以不跟类名,表示全局数据或全局函数(即非成员函数)。

3.类名加载成员函数名之前而不是加在函数的返回类型前。

错误:Tdate::void Set(int m , int d , int y) {}

正确: void Tdate::Set(int m , int d , int y) {}

4.一个类对象所占据的内存空间由它的数据成员所占据的空间总和所决定。类的成员函数不占据对象的内存空间。

5.类的成员函数可以访问该类的private成员。

6.类作用域是指类定义和相应的成员函数定义范围。在该范围内,一个类的成员函数对同一类的数据成员具有无限制的访问权。

7.#include <filename.h> 和#include “filename.h” 有什么区别?

答:

  • 对于#include <filename.h> ,编译器从标准库路径开始搜索filename.h
  • 对于#include “filename.h”,编译器从用户的工作路径开始搜索filename.h

8.

  1. int a = 1 , b = 0; 
  2. MAX(a++ , b);    //a被增值2次 
  3. MAX(a++ , b + 10); //a被增值1次 


MAX(a++ , b)的值为2,同时a的值为3;
MAX(a++ , b + 10)的值为10,同时a的值为2

9.类定义是不分配空间和初始化的。类是一个抽象的概念,并不是一个实体,并不含有属性值,而只有对象才占有一定的空间,含有明确的属性值。

10.运行如下代码:

复制代码
class A
{
public:
    A(int j):age(j) , num(age + 1)
    
        //...

protected:
    int num;
    int age;
};

void mian()
{
    A sa(15);
}
复制代码

代码运行结果:num=“随机值 ”, age= 15

由于按成员在类定义中的声明顺序进行构造,而不是按构造函数说明中冒号后面的顺序,所以num成员被赋的是一个随机值,并不是想赋的16,因为这个时候,成员age还没有被赋值,age的内存空间中是一个随机值。

11.如果 const 出现在 * 左边,则指针指向的内容为常量;如果 const 出现在 * 右边,则指针自身为常量;如果 const 出现在 * 两边,则两者都为常量。

  1. <<effective C++>>上有个好记的方法:const在*号左边修饰的是指针所指的内容;const在*号右边修饰的是指针。 
  2. 简单记就是:左内容,右指针。 


我只要一听到被面试者说:"const意味着常数",我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着"只读"就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。)如果应试者能正确回答这个问题,我将问他一个附加的问题:下面的声明都是什么意思?

const int a;

int const a;

const int *a;

int * const a;

int const * a const;

前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。顺带提一句,也许你可能会问,即使不用关键字const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由:

1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)

2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。

3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。

const的用法参考:http://blog.youkuaiyun.com/hyg0811/article/details/9349869

12.C++一维数组和指针的关系总结

对于数组int a[10]; a表示数组的第一个元素的地址,即&a[0];

如果使指针p,指向数组的首元素,可以进行操作:int * p=a; 或者int *p=&a[0];

那么p++,是指向数组中的先一个元素,即a[1];

  此时*p则是a[1]中所放的值。

  此时,a[i]=p[i]=*(a+i)=*(p+i)

关于*p++,由于++和*的优先级相同,结合方向是自右而左,因此它等价于*(p++)。作用是:先得到p指向的变量的值(即*p),然后再使指向p的值加1.

*p++等价于*(p++);而*(++p)表示先使p+1,再取*p。

13.在VC中,sizeof有着许多的用法,而且很容易引起一些错误。下面根据sizeof后面的参数对sizeof的用法做个总结。

  A.参数为数据类型或者为一般变量:

  例如sizeof(int),sizeof(long)等等。

  这种情况要注意的是不同系统系统或者不同编译器得到的结果可能是不同的。

  例如int类型在16位系统中占2个字节,在32位系统中占4个字节。

  B.参数为数组或指针:

  int a[50]; //sizeof(a)=4*50=200;求数组所占的空间大小

  int *a=new int[50];// sizeof(a)=4; a为一个指针,sizeof(a)是求指针的大小,在32位系统中,当然是占4个字节。

  C.参数为结构或类:

  Sizeof应用在类和结构的处理情况是相同的,需要考虑字节对齐(参加另一篇文章:http://www.cnblogs.com/heyonggang/archive/2012/12/11/2812304.html)。另外有几点需要注意:

  第一、结构或者类中的静态成员不对结构或者类的大小产生影响,因为静态变量的存储位置与结构或者类的实例地址无关。

  第二、没有成员变量的结构或类(非虚)的大小为1,因为必须保证结构或类的每一个实例在内存中都有唯一的地址。

  第三、包含虚函数的类或者虚继承的类,需要算上虚表指针的占的4个字节。

  下面举例说明:

  Class Test{int a;static double c};//sizeof(Test)=4.

  Test *s;//sizeof(s)=4,s为一个指针。

  Class test1{ };//sizeof(test1)=1;

  Class test2{ virtual void print(){}};//sizeof(test2)=4;

14.运算符new分配堆内存,如果成功,则返回指向该内存的空间,如果失败,则返回NULL。所以每次使用运算符new动态分配内存时,都应测试new的返回指针值,以防分配失败。

复制代码
1 Person::Person(Person &p)
2 {
3     cout<<"Copying "<<p.pName<<"into this own book\n";
4     pName = new char[strlen(p.pName) + 1];
5     if(pName != 0)
6         strcpy(pName , p.pName);
7 }
复制代码

15.如果你的类需要析构函数来析构资源,则它也需要一个拷贝构造函数。

由于C++提供的默认拷贝构造函数只是对对象进行浅拷贝复制。如果对象的数据成员包括指向堆空间的指针,就不能使用这种拷贝方式,此时必须自定义拷贝构造函数,为创建的对象分配堆空间。

16.类成员函数的重载、覆盖和隐藏区别?

    答案:

    a.成员函数被重载的特征:

    (1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。

    b.覆盖是指派生类函数覆盖基类函数,特征是:

    (1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。

    c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

    (1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

    (2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)

17.《C++程序设计教程》P352

在例子中并没有声明派生类GraduateStudent的构造函数,根据类的实现机制,派生类对象创建时,将执行其默认的构造函数。该默认构造函数会先调用基类的默认构造函数,而基类没有默认构造函数,但正好匹配默认参数的构造函数。

18.在运行时,能根据其类型确认调用哪个函数的能力,称为多态性,或称迟后联编,或滞后联编。编译时就能确定哪个重载函数被调用的,称为先期联编。

复制代码
多态性可可以简单的概括为“一个借口,多种方法”,在程序运行的过程中才决定调用的函数。

虚函数就是允许被其子类重新定义的成员函数。而子类重新定义父类虚函数的做法,称为“覆盖”或“重写”。

覆盖是指子类重新定义父类的虚函数的做法。

重载是指允许存在多个同名函数,而这些函数的参数表不同。
复制代码

为了指明某个成员函数具有多态性,用关键字virtual来标志其为虚函数。

如果虚函数在基类与子类中出现的仅仅是名字的相同,而参数类型不同,或返回类型不同,即使写上了virtual关键字,则也不进行迟后联编。

19.一个类中将所有的成员函数都尽可能地设置为虚函数总是有益的。它除了会增加一些资源开销,没有其它坏处。

设置虚函数,需注意下列事项:

  1. 只有类的成员函数才能说明为虚函数。这是因为虚函数仅适用于有继承关系的类对象,所以普通函数不能说明为虚函数。
  2. 静态成员函数不能是虚函数,因为静态成员函数不受限于某个对象。
  3. 内联函数不能是虚函数,因为内联函数是不能在运行中动态确定其位置的。即使虚函数在类的内部定义,编译时,仍将其看作非内联的。
  4. 构造函数不能是虚函数,因为构造时,对象还是一片未定型的空间。只有在构造完成后,对象才能成为一个类的名副其实的实例。
  5. 析构函数可以是虚函数,而且通常声明为虚函数。

 

【ARM CoreLink 系列 4 -- NIC-400 控制器详细介绍】 正常情况下,一个NIC的实现,可以包含一百多个master和几十个slave,每个master和每个slave都会有一些寄存器,这些寄存器可以被 programming,实际实践中就会对 AMIB 或者 ASIB 或者 IB,当它需要具有 programming的时候,给它指定一个node number。为什么指定Node Number呢?首先,从CPU的角度,它需要有一个1M对齐的地址空间,在这1M地址空间上,对每个ASIB或者AMIB这样的接口给它一个node number以后, 阅读详情

相关推荐

CoppeliaSim+matlab+simulink七轴机械臂仿真

七轴机械臂vrep+matlab+simulink 仿真

a1233219的博客 3546

C++从入门到放弃保姆级教程 — 数组

C++从入门到放弃保姆级教程 — 数组 先提出一个问题,我们要输入一个整数,应该先声明一个变量吧。 那如果我们要100呢?声明100次?写一百个?那不是很麻烦。 所以解决办法是数组,声明是数组呢,就是一堆相同类型的数。 这样声明: int a[100]; int b[x] = {1,2,3,4,5,6,7,8,9,10}; //这两种都是可以的,区别在于,b手动地给每个值赋值,并且x可以不写,如果...

kylinholmes的博客 252

HyperLPR3车牌识别-Android-SDK光速部署与使用

基于深度学习高性能中文车牌识别 High Performance Chinese License Plate Recognition Framework.快速部署AndroidSDK

tunm 6119

C++知识点整理

2. C与C++一点区别 (1)C语言中没有bool类型,C++才有; (2)C函数中的参数不能设置默认值,C++可以; (3)for(int i=0; i&lt;10; i++)此段代码将报错: 只允许在 C99 模式下使用‘for’循环初始化声明 附注:使用 -std=c99 或 -std=gnu99 来编译您的代码 1.引用与指针有什么区别? 1)引用必须被初始化,指针不必。(...

yxtxiaotian的专栏 6437

飞腾E2000单板移植openEuler 5.10内核与麒麟系统的实践指南

本文详细介绍了在飞腾E2000单板上移植openEuler 5.10内核并搭配麒麟系统根文件系统的完整实践指南。内容涵盖从编译环境搭建、内核配置裁剪、设备树适配,到根文件系统准备、U-Boot引导配置及启动调试的全流程,旨在帮助开发者打造一个内核版本新、软件生态全的稳定混合系统。

weixin_29309475的博客 258

Windows 10下Carla 0.9.15安装避坑指南:从下载到运行的全流程解析

本文详细解析了在Windows 10系统上安装和运行Carla 0.9.15自动驾驶仿真平台的全流程。内容涵盖从系统环境准备、资源下载、Python依赖安装,到首次启动验证及常见错误(如DLL缺失、显卡驱动问题)的深度解决方案,旨在帮助用户快速搭建稳定的开发环境,并运行第一个自动驾驶Python脚本。

alice7model的博客 546

C++重点知识详细整理、2万字总结(面试前准备)

目录 第 1 章. C++的初步知识 1.1 从C到C++ 1.2 C++对C的扩充 1.3 用const 定义常变量 1.4 C++的函数声明 1.5 C++重载 1.6 函数模板 1.7 有默认参数的函数 1.8 变量的引用 第 1 章. C++的初步知识 1.1 从C到C++ C语言是结构化和模块化的语言,它是面向过程的,在处理较小规模的程序时,用C语言较得心应手 Q: 那为什么当问题比较复杂、程序规模较大时不适用C程序呢? A: ..

weixin_44134344的博客 3766

动态数据脱敏技术分析

在当前国内信息安全热潮中,数据脱敏作为数据安全的重要一环得到了业界的认可与重视。早在2012年,数据脱敏首次作为一个单独的魔力象限由Gartner发布,Gartner在2014年又提出了:按照数据使用场景,将数据脱敏分为静态数据脱敏(Static data masking-SDM )与动态数据脱敏(Dynamic data masking-DDM )。 可能有人望文生义,认为动态数据脱敏一定比静态数据脱敏高级。非也非也,静态or动态,取决于脱敏的使用场景,主要是以使用场景为由来选择合适的数据脱敏的模式。 本

美创科技的博客 4670

C++知识整理笔记

c++

plain_的博客 3465

KUKA机器人 - 从开机到自动运行

注1:本文仅代表本人对机器人使用的一些建议,在使用机器人前,还请详细阅读库卡机器人官方资料,道路千万条,安全第一条!!! 注2:技术有限,欢迎各位大大在阅读过程中发现各类问题,并且批评指正!!! 目录 一、准备工作 1. 机器人上电完成 2. 电脑安装Workvisual 二、学习手动移动机器人 三、项目配置 1. 设置机器人IP地址 2.电脑和机器人通过网线连接 3.查找并打开项目 4. 通讯配置 5. 项目上传 6. 检验IO配置 四、编程 1.新建程序 2. 程序...

yilunyao的博客 1万+

prplOS amx-fxgi调试-订阅subscribe

本文分析了prplOS中amx-fxgi订阅功能(subscribe)的实现与调试过程。通过梳理订阅流程发现,默认订阅失败主要由于acl规则限制导致。文章详细介绍了订阅的两个关键步骤:建立GET长连接和POST设置订阅路径,并通过修改代码绕过acl验证成功实现订阅功能。最终验证了在同一连接下订阅多个路径及实时接收状态更新的可行性,有效降低了设备查询负载。该方案为prplOS的实时数据监控提供了优化思路。

四儿家的小祖宗的博客 330

C++ primer 第一部分C++基础(1-7章) 不熟悉的知识点 小结

P58 constexpr 和常量表达式 常量表达式 是指值不会改变 并且 在编译过程 就能得到计算结果的表达式; 字面值属于常量表达式; 用常量表示式初始化的const对象 也是常量表达式; constexpr变量 C++11:允许将变量声明为constexpr类型以便 由编译器来验证变量的值是否是一个常量表达式; 一般来说,如果你认定变量是一个常量表达式,那就把它声明成con...

weixin_30725315的博客 81

【AI】获取各类AI大模型api-key的快速教程(OpenAI、Gemini、Claude、DeepSeek)

【AI】获取各类AI大模型api-key的快速教程(OpenAI、Gemini、Claude、DeepSeek)

funfan的博客 2946

C++知识点小结

reference: 作者:大叔龙 链接:http://www.jianshu.com/p/e21d99638cf9 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。1.基础问答:容器、数据结构、排序算法什么得 2.然后一顿虚函数、虚函数表、纯虚函数、抽象类、析构函数、拷贝构造函数 3.操作数重载、STL、智能指针、内存问题1,你知道虚函数吗? 答案:实

code_caq的博客 1249

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C++中的引用知识点小结

文章目录引用的概念引用特性常引用使用场景引用和指针的区别 引用的概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。 比如:李逵,在家称为"铁牛",江湖上人称"黑旋风"。那么这里的“铁牛”、“黑旋风”就称李逵的引用。 在程序中呢,引用的用法如下: 类型& 引用变量名(对象名) = 引用实体; 举个例子: void TestRef() { int a = 10; int& ra = a;//<====定义引

m0_56808122的博客 2043

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C++PrimerPlus知识点小结

C++融合了3种不同的编程方式:C语言代表的过程性语言,C++在C语言基础上添加的类代表的面向对象语言(oop),C++模板支持的泛型编程。 C++11初始化方式 //大括号初始化,等号可以使用,也可以不使用 int emus{7}; int rheas={12}; //大括号内不包含任何东西,这种情况下变量将被初始化为零 int rocs={}; ...

qq_34921856的博客 1065

C++基础知识点小结

C++基础知识点小结第一章 绪论(1)cout 输出流的对象(2)cin输入对象(3)endl 输出控制符/操控符(4)标识符(5)命名空间(namespace)(6)左值:(7)右值(8)c++赋值方式(整型和浮点型)(9)string字符串:第二章 引用与函数第三章 类的封装第四章 堆空间与深拷贝第五章 静态与友元第六章 继承与多态第七章 运算符重载第八章 模板与STL第九章 异常处理第十章 文件处理 C语言的缺点: 1.C类型检查机制相对较弱,这使得程序中的一些错误不能在编译时发现。 2.C本身

weixin_47946639的博客 513

cpp知识点小结

cout 不会截断数据; 头文件:<iomanip> setw( )包括小数点,右对齐,字符串的空格也有效 ,只对下一个有效; cout . width ( ) ; setprecision ( )有效位数 ,一直有效; cout.precision ( ) ; setprecision(2) << setiosflags(iOS::fixed) 小数点位数 ; cout .setf ( ios::fixed | ios::showpoint) // 输出小...

weixin_54025765的博客 578

C++ 程序设计基本概念 知识点 小结

知识点包括:全局变量的二次赋值;计算转化为二进制后,数字中 1 的数量;用一个非循环表达式判断一个数是否是2的N次方;逻辑运算与位逻辑运算;printf 输入表达式的执行顺序;位运算判断输入参数是否为2的幂次;位运算两个数值的取平均与求和;无判断语句求取变量中较大存在;无中间量交换变量;C/C++关系。

稚枭天卓 2706

C++小结

C++小结 一、构造函数和析构函数 对象的构造从类层次的最根处开始,在每一层中,首先调用基类的构造函数,然后调用成员对象的构造函数。析构则严格按照与构造相反的次序执行,该次序是唯一的,否则编译器将无法自动执行析构过程。 一个有趣的现象是,成员对象初始化的次序完全不受它们在初始化表中次序的影响,只由成员对象在类中声明的次序决定。这是因为类的声明是唯一的,而类的构造函数可以有多个,因此会有多...

大隐隐于野 366
上一篇: C++中引用的本质是什么?
下一篇: OpenCV c接口与c++接口
大老鼠
博客等级 码龄15年 14粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值