c++项目经验分享

本文详细探讨了C++编程中的关键概念,包括const与#define的区别、逗号运算符的使用、指针与整数赋值的注意事项、多态性、函数重载和运算符重载。此外,还讲解了C++中的存储方案、自定义string类的要点、虚函数原理、构造函数的执行特点,以及C与C++结构体的区别。文章深入浅出地分析了C++中的各种陷阱和最佳实践,帮助开发者提升C++编程能力。
摘要由CSDN通过智能技术生成

1、C++的const比C语言#define更好的原因?

首先,它能够明确指定类型,有类型检查功能。

其次,可以使用C++的作用域规则将定义限制在特定的函数[常函数]或文件中。

第三,可以将const用于更复杂的类型,比如数组和结构。

C语言中也有const,在C语言中分配内存,其与C++中const的区别是:一是作用域规则不同;另一个是,在C++中可以用const值来声明数组长度。在C++中const在没有取地址和加extern时,是不分配内存空间的,和#define有相同的效果,常量折叠。

注意:外部要能访问test.cpp中的const形式的n, 必须在test.cpp中定义的时候用extern限定。

test.cpp

extern const int n = 100;  //必须加extern

#include <iostream> 

using namespace std; 

extern const int n; 

int main() 

{ 

   cout << n << endl; 

   return 0; 

} </iostream>

2、逗号运算符

逗号运算符的特性有下面几个:

(1)它确保先计算第一个表达式,然后计算第二个表达式;

i = 20, j = 2 * i; // i set to 20, then jset to 40

(2)逗号表达式的值是第二部分的值。例如,上面表达式的值为40。在所有运算符中,逗号运算符的优先级是最低的。例如:

cats = 17, 240; //被解释为:(cats =17), 240;

也就是说,将cats设置为17,后面的240不起作用。如果是:

cats = (17, 240); //cats=240。

3、不能简单地将整数赋给指针,如下所示:

int *ptr;

ptr = 0x12342342;  // type mismatch

在这里,左边是指向int的指针,但右边是一个整数。在C99标准发布之前,C语言允许这样赋值。但C++在类型一致方面的要求更严格,编译器将显示一条错误消息,通告类型不匹配。要将数字值作为地址来使用,应通过强制类型转换将数字转换为适当的地址类型:

int *ptr;

ptr = (int *) 0x12342342;  // type now match

这样,赋值语句的两边都是整数的地址,因此这样赋值有效。但是这样做很危险。随意的数值可能是指向系统的重要文件,这样就会是系统崩溃。

注意,pt是int值的地址并不意味着pt本身的类型是int。例如,在有些平台中,int类型是个2字节值,而地址是个4字节值。

4、C++的多态性分为静态多态和动态多态。

静态多态性:编译期间确定具体执行哪一项操作,主要是通过函数重载和运算符重载来实现的;

动态多态性:运行时确定具体执行哪一项操作,主要是通过虚函数来实现的。

5、下面的程序输出结果是多少?</

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值