C/C++知识点整理(3)

VScode编写调试C/C++程序(详细整理) 步骤:一. 安装vscode二. 安装C++插件三. 安装编译器minGW-w64并配置环境变量四.修改vscode配置文件五、运行六、调试 一. 安装vscode vscode从配置到安装,请参考博客:https://blog.youkuaiyun.com/didi_ya/article/details/106931500 二. 安装C++插件 C/C++插件是必要的。 三. 安装编译器minGW-w64并配置环境变量 具体安装步骤可参考博客:https://blog.youkuaiyun.com/didi_ya/articl 阅读详情

1. C++中构造函数和析构函数可以抛出异常吗?

A.都不行

B.都可以

C.只有构造函数可以

D.只有析构函数可以

答案:C

构造函数尽量不抛异常,析构函数不要抛异常。
对于构造函数:
在构造函数中抛出异常,将导致正在构造的对象的析构函数不会被执行。当对象发生部分构造时,已经构造完成的子对象将被逆序的析构(即异常发生点前面的对象),而还没有开始构造的子对象将不会被构造了(即异常发生点后面的对象),但正在构造的子对象和对象自己本身将停止构建,并且它的析构函数树不会被调用的。
对于析构函数:
more effective c++提出两点理由(析构函数不能抛出异常的理由):
(1)如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要动作,比如释放某些资源,则这些动作不会被执行,会造成诸如资源泄露的问题。
(2)通常异常发生时,C++的机制会调用已经构造对象的析构函数来释放资源,此时若析构函数本身也抛出异常,则前一个异常未处理,又出现新的异常会导致程序崩溃。

解决方案:
如果某个操作可能会抛出异常,class应该提供一个普通函数而非析构函数,来执行该操作。
如果无法保证在析构函数不发生异常。我们可以用try catch来将异常吞下。也就是把异常完全封装在析构函数内部,绝不让异常抛出函数之外。

~ClassName()
{
  try{
      do_something();
  }
  catch(){  
  //可以什么都不做,只是保证catch块的程序抛出的异常不会被扔出析构函数之外
   }
}

2. 下面四个类A,B,C,D,在32位机器上sizeof(A),sizeof(B),sizeof(C),sizeof(D)值分别为()

class A{
};
class B{
    char ch;
    int x;
};
class C{
public:
    void Print(void){}
};
class D
{
public:
    virtual void Print(void){}
};

答案: 1,8,1,4

类A空类型的实例虽然不包含任何信息,但是必须在内存中占一定的空间,否则无法使用这些实例,一般都是1。

类B因为内存对齐所以为8。

类C里面虽然有函数,但是只需要知道函数的地址即可,而这些函数的地址只与类型相关,而
与类型的实例无关,编译器不会因为函数而在内存中多添加任何的额外信息.所以还是1 。

类D因为有虚函数,C++的编译器一旦发现一个类型中有虚函数,就会为该类型生成虚函数表,并在该类型的
每一个实例中添加一个指向虚函数表的指针.因为多了一个指针,所以在32位机器为4,64位机器为8。

3. 假定CSomething是一个类,执行下面这些语句之后,内存里创建了__个CSomething对象。

CSomething a();
CSomething b(2);
CSomething c[3];
CSomething &ra = b;
CSomething d=b;
CSomething *pA = c;
CSomething *p = new CSomething(4);

答案:6

CSomething a();// 没有创建对象,这里不是使用默认构造函数,而是定义了一个函数,在C++ Primer393页中有说明。定义一个函数,参数为空,返回值为CSomething对象, 类似int func() 。

CSomething b(2);//使用一个参数的构造函数,创建了一个对象。

CSomething c[3];//使用无参构造函数,创建了3个对象。

CSomething &ra=b;//ra引用b,没有创建新对象。

CSomething d=b;//使用拷贝构造函数,创建了一个新的对象d。

CSomething *pA = c;//创建指针,指向对象c,没有构造新对象。

CSomething *p = new CSomething(4);//新建一个对象。

4. 有以下程序

#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
  int m=0123, n = 123;
  printf("%o %o\n", m, n);
  return 0;
}

程序运行后的输出结果是()
A.0123 0173
B.0123 173
C.123 173
D.173 173

答案: C

o% 表示8进制进行输出int m=0123; m已经是8进制不需要进行转换 而n=123是10进制 需要进行8进制转换 得173 。

5. 关于虚函数的描述正确的是()

A.派生类的虚函数与基类的虚函数具有不同的参数个数和类型

B.内联函数不能是虚函数

C.派生类必须重新定义基类的虚函数

D.虚函数可以是一个static型的函数

答案:B

内联函数是编译器就展开的,把代码镶嵌就程序,虚函数是动态绑定,运行期决定的。所以内联函数不能是虚函数 。

6. 有以下程序

#include <stdio. h>
int fun( intA )
{
    int b = 0;
    static int c = 3;
    a = ( c + +,b + + );
    return ( a );
}
main( )
{
    int a = 2,i,k;
    for( i = 0;i<2;i + + )
        k = fun( a + + );
    printf("%d\n",k );
}

程序的输出结果是?

答案:0

这个题目考的是逗号表达式,a = 表达式1,表达式2,则a = 表达式2,同理如果后面有n个表达式的话,返回的是最后一个表达式的值。

7. 有如下程序段:

#include <iostream>

void GetMemeory(char *p)
{
    p = (char *)malloc(100);
}
void Test()
{
    char *str = NULL;
    GetMemeory(str);
    strcpy(str, "Thunder");
    strcat(str + 2, "Downloader");
    printf(str);
}

请问运行Test函数结果是:

A.Thunder Downloader
B.under Downloader
C.Thunderownloader
D.程序崩溃

答案:D

  1. .参数是值传递,函数给参数p重新开辟空间,所以改变的是p指向的空间,str没变。
  2. GetMemory函数执行完成后,str仍然指向NULL,所以赋值时回奔溃 。
  3. 正确的做法应该使用双指针 。
void GetMemory(char **p){
    *p = (char *)malloc(100);
}
void Test(){
    char *str = NULL;
    GetMemory(&str);
    printf(str);
}

8. 不能作为重载函数的调用的依据是:

A.参数个数
B.参数类型
C.函数类型
D.函数名称

答案:C

9.以下代码编译有错误,哪个选项能解决编译错误?

class A {
    public:
        int GetValue() const {
            vv = 1;
            return vv;
         }
    private:
        int vv;
};

A.改变成员变量”vv”为”mutable int vv”

B.改变成员函数”GetValue”的声明,以使其不是const的

C.都不能修复编译错误

D.都可以修复编译错误

答案:D

mutalbe的中文意思是“可变的,易变的”,跟constant(既 C ++中的const)是反义词。

在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。

我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。

10.有一个类B继承自类A,他们数据成员如下:

class A {
...
private:
   int &a;
};
class B : public A {
...
private:
     int a;
public:
     const int b;
     A c;
     static const char* d;
     A* e;
};

则构造函数中,成员变量一定要通过初始化列表来初始化的是__。

答案:b,c

在构造函数中需要初始化列表初始化的有如下三种情况 :
1.带有const修饰的类成员 ,如const int a ;
2.引用成员数据,如 int& p;
3.带有引用的类变量

static成员是不允许在类内初始化的,除了const,那么static const 成员是不是在初始化列表中呢?

当然不是。
一是static属于类,它在未实例化的时候就已经存在了,而构造函数的初始化列表嘞,只有在实例化的时候才执行。
其二是static成员不属于对象。我们在调用构造函数是创建对象,一个跟对象没直接关系的成员要它做什么呢 o(^▽^)o。

11. 类A是类B的友元,类C是类A的公有派生类,忽略特殊情况则下列说法正确的是()
A.类B是类A的友元

B.类C不是类B的友元

C.类C是类B的友元

D.类B不是类A的友元

答案:B,D

友元关系是单向的,不是对称,不能传递。
关于传递性,有人比喻:父亲的朋友不一定是儿子的朋友。
那关于对称性,是不是:他把她当朋友,她却不把他当朋友,(●ˇ∀ˇ●)

【CSP-J/S初赛知识点整理】 CSP-J/S初赛知识点整理 阅读详情

相关推荐

MAC+VS Code+C/C++调试配置

MAC+VS Code+C/C++调试配置 第二篇博客啦,这一篇博客接着上篇没有写完的内容,继续跟大家安利颜值无敌高的VS Code。 由于自己的小白本质,在配置VS Code的C/C++环境时,很多事情并不清楚,第一次虽然配置成功了,但是后来自己又想重新整理一下工作区的文件,结果越理越乱,索性将整个文件夹删了(无奈脸),结果后来重新调试一直不成功,然后自己又有点强迫症,就一定想要配置好,结果...

澜子的博客 3万+

C/C++学习(5)友元类分析

题目来源:点击打开链接 类A是类B的友元,类C是类A的公有派生类,忽略特殊情况则下列说法正确的是() 类B是类A的友元 类C不是类B的友元 类C是类B的友元 类B不是类A的友元 分析: (1) 友元关系不能被继承。 (2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。 (3

王小东大将军的博客 1179

C/C++ 常用函数整理

<string.h> int strcmp (const char*, const char*) :把str1所指向的字符串和str2所指向的进行比较 s1>s2,return 1; s1==s2,return 0; s1<s2,return -1; 但在有的编译器上运行结果是 s1-s2的值,而不仅是以上的三种结果 ...

wuyaxin 2592

【C++笔试强训】第四天

遇事不决,可问春风,春风不语,即随本心

weixin_60478154的博客 953

RagFlow 文档解析

RAGFlow 的设计哲学是“高质量输入,高质量输出”,它通过提供可解释性和可控性的生成结果,让用户能够信任并依赖于系统提供的答案。

weixin_43008312的博客 3999

SAP数据导入工具(LSMW) 超级详细教程(批量导入内部订单)

用户提了个需求,让我批量导入内部订单几百个内部订单。我本打算用写段ABAP 代码来调用 BAPI (BAPI_INTERNALORDER_CREATE)就可以了。但想到我很久没有用过LSMW 了,都快要忘记了。于是我采用LSMW的方式,完成了任务。并把过程记录下来,形成教程方便我以后回头查看,分享出来也希望对大家有帮助。

IT小职员 2万+

构造函数中,哪些成员变量一定要通过初始化列表来初始化

构造函数中,哪些成员变量一定要通过初始化列表来初始化 构造函数初始化时必须采用初始化列表一共有三种情况, 需要初始化的数据成员是对象(继承时调用基类构造函数) 需要初始化const修饰的类成员 需要初始化引用成员数据 因为static属于类并不属于具体的对象,所以 static成员是不允许在类内初始化的, 那么static const 成员是不是在初始化列

hyqsong的专栏 5541

Basilisk vs. STK:开源航天仿真工具在Windows上的实战体验与生态对比

本文对比了开源航天仿真工具Basilisk与商业软件STK在Windows平台上的实战体验与生态差异。从技术架构、安装配置、使用成本、功能覆盖、社区生态到适用场景,全面分析了二者的优劣势,为航天工程师和研究人员提供选型参考。Basilisk在性能和扩展性上表现突出,而STK在可视化与专业模块上更具优势。

weixin_30632089的博客 588

选择题--01

1.c++不能重载的运算符有.(点号),::(域解析符),?:(条件语句运算符),sizeof(求字节运算符),typeid,static_cast,dynamic_cast,interpret_cast(三类类型转换符)。 2.有一个类B继承自类A,他们数据成员如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class A {

ryan_jianjian的博客 427

把对讲门铃(控制底楼铁门)接入米家服务器

今天讲个跟SDR或者无人机无关的东西,技术含量不高,但是方便了我的生活。 现在家门有智能锁,汽车也可以远程解锁发动,NFC门禁也可以用某些手机复制,唯独楼下的铁门,必须用老式对讲门铃控制。 也就是说其它钥匙都可以不带,就剩这个钥匙还必须随身携带。 另外有时候人不在家,不能开楼下铁门,快递员也没法把东西送上楼。 ......

老邵的开源世界 6549

芯片封装、功率密度提升及热管理系统优化三个维度分析高功率芯片散热技术挑战

本文探讨高功率芯片散热技术挑战与创新。随着新能源汽车MOSFET用量增至400颗/车,文章聚焦封装技术创新(双面散热、集成模块)、功率密度提升(SGT-MOSFET优化)和热管理系统协同优化三大方向。通过热仿真案例(如CPO散热优化)展示温升改善方案,强调需协同器件级设计、系统级仿真与先进封装技术(混合键合/玻璃基板)来解决高密度互连与散热矛盾,为功率密度跃升提供技术支撑。

莱歌数字的博客 1473

GetMemeory(char *p);GetMemeory(char **p);char* GetMemeory()用法!

void GetMemeory(char *p) { p=(char*)malloc(100); } void main() { char *str=NULL; GetMemory(str); strcpy(str,"hello world"); printf(str); } 以上这段代码运行会直接崩溃,虽然在函数内部分配了内......

魏波 1270

RK3588 Linux启动优化至亚秒级全链路剖析

本文深入探讨RK3588平台Linux系统启动加速技术,涵盖从BL1/ATF安全固件、U-Boot剪裁到内核精简化等全链路优化方案,实现从上电到用户脚本800ms内完成的实战经验。​​文末提供完整解决方案获取方式​​。由于在 ARMv6 之后引入了 TrustZone 模块, 目前市面上 ARMv7 和 ARMv8 之后的系统都会包含了该模块, 这个模块由 BL1 启动, 且在 ATF(ARM Trust Firmware) 固件中, 既安全世界中引导到 BL33 (UBOOT)的系统。

韩若明溪 1777

c/c++易错知识点整理3(引用和指针)(一)

1.一般变量引用 #include #include using namespace std; int main() { int a=10; int b=20; int &rn=a; int equal; rn=b; rn=100 equal=(&a==&rn)?1:0; } a=10;b=20;

JeremyZJM的博客 500

【温室气体数据集】全球总碳柱观测网络 TCCON

【温室气体数据集】全球总碳柱观测网络 TCCON

WW、forever的博客 437

华为OD机试双机位C卷:采购订单 (Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷 采购订单,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,并提供在线OJ模拟做题。华为OD机试真题【采购订单】

qq_45776114的博客 3534

【C/C++】Dev-C++的安装与使用以及快捷键整理

有时候也叫做Dev-Cpp,是一个免费软件,最早是由BloodShed公司开发的,在版本4.9.2之后BloodShed公司停止了开发并且开放了源代码,之后是由Orwell公司接手进行维护,Orwell公司陆续开发了几个版本,到5.11版本之后更新就比较少了,但是后来也有一些其他的开发人员开发维护了一些分支版本,比如Dev-C++ 的魔改——小熊猫C++。的工具,Dev-C++ 仍然是一个不错的选择。:在 "Tools" → "Editor Options" → "Syntax" 中更改编辑器配色方案。

艾莉丝努力练剑的博客,感谢大家一直以来的对艾莉丝的支持和鼓励,uu们如果对C/C++方向感兴趣的话,可以通过艾莉丝主页的微信名片加艾莉丝的好友,和努力练剑的艾莉丝一起加油! 5018

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

整理的C/C++相关的面经知识点

自己在找工作的过程中,参考了一些博客并自己整理的有关C/C++面经知识点。 C语言中 new和malloc的区别 **申请内存所在位置:**new/delete是操作符,malloc/free是函数;new操作符从自由存储区(free store)上位对象动态分配内存空间,而malloc函数从从堆上动态分配内存。而且new在申请对象时会调用对象的构造函数和析构函数 **自由存储区是C++基于ne...

Tanner_SL的博客 789

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C++知识点整理

虽说还没学完这本书,但是我想着这件事差不多已经可以着手开始做了,就慢慢整理,慢慢更新,总会写完的。 这篇博客是会更新的,直到把我认为要考的内容写完 有和同学讨论这篇博客啦,因为我真的很想把这篇博客写好,我也确实发现了一些问题,就是我这篇博客是基于你C语言的基础ok,C++愿意照着课本看,却有点疑惑,可以来这里看看我的理解的,当然如果你学的很棒的话,这篇博客没有吊用,相信自己就好了,其实我有想着...

permi_yaxileni的博客 7667

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C语言/C++学习路线图(2021整理)

C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。 接下来是小编整理过C/C++工程师必备知识的思维导图。 初学者看到这么密集的知识点,是不是有点眼晕呢?的确,C/C++是一门知识面覆盖很广的学科。想学好C/C++的你并不需要慌张,内容虽多,但依然有法可依。只要有足够的耐心和毅力,加上正

weixin_55305220的博客 9166

C++面试题&知识点整理

近期在找工作,面的基本上是C/C++相关岗位,整理了一些网上提到的面试题或者知识点,慢慢补充吧,有错误的地方欢迎指出。 1. 线程、锁 1.1. posix thread 互斥锁 创建:动态/静态 属性: 普通锁、嵌套锁、检错锁、适应锁 锁操作:pthread_mutex_lock、pthread_mutex_unlock、pthread_mutex_trylock 1...

Chen_zju的博客 2903

【C/C++】必知必会知识点大总结

📣专栏定位:整理一下 C++ 相关的知识点,供大家学习参考~🎏唠叨唠叨:在这个专栏里我会整理一些琐碎的 C++ 知识点,方便大家作为字典查询~

Newin2020的博客 2177

40+张最全Linux/C/C++思维导图,收藏!

关注、星标公众号,直达精彩内容整理:张巧龙、李肖遥申明:所有图片都源自网络素材,侵删。这是我自己收集的,并花大量时间整理的可说最全的Linux/C/C++思维导图。有些图可能不是高清,但...

张巧龙的博客 2324

C/C++开发环境

如同, 缺少了对cJSON的编译,这里对成员函数的所需的c/cpp文件未被编译。也就是按单文件编译方法对多文件进行编译。解决办法:在tasks.jason 中设置源文件,将"args"的值语言CC++C/C++这里的 ${fileDirname} 表示当前目录。

Watom_663的博客 3288

C/C++知识点整理

【001 关键字】宏定义中的#和##的用法【002 关键字】一文彻底搞懂volatile用法【003 关键字】static关键字在C语言和C++中的使用及区别【004 关键字】extern “C“的作用是什么?【005 关键字】const的作用及使用条件【006 关键字】new/delete与malloc/free的区别是什么? 【007 关键字】strlen(“\0“) sizeof(“\0“) 等于多少?【008 关键字】sizeof和strlen的用法区别?【009 关键字】不使用sizeof关键字,

kashine的博客 407

【C/C++】形参、实参相关内容整理

形参:函数调用时创建实参:调用前已存在。

艾莉丝努力练剑的博客,感谢大家一直以来的对艾莉丝的支持和鼓励,uu们如果对C/C++方向感兴趣的话,可以通过艾莉丝主页的微信名片加艾莉丝的好友,和努力练剑的艾莉丝一起加油! 1616
上一篇: LeetCode207. Course Schedule
下一篇: LeetCode89. Gray Code
_IanXiao
博客等级 码龄12年 84粉丝 241原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值