栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++入门笔记

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++入门笔记

默认值参数

在函数声明或定义的时候,给定参数默认值,如果参数传递的时候不给该形参传值,则会按照默认值传参。

  • 函数参数的默认值是在编译期生成指令的时候,直接生成入参指令,函数参数的默认值只能传递常量。
  • 函数的默认值参数只能从右向左赋值,不能跳过。
  • 函数的默认值参数在同一作用域中只能赋值一次,不能重复赋值。
  • 因为函数参数的默认值是在编译期时期带入的,所以函数参数的默认值只在本文件中生效。

内联函数

  • 在release版本中调用内联函数,该函数会在调用点展开(编译时期展开)。
  • 在debug版本中调用内联函数和正常函数的调用方法一致。
  • 由于内联函数在编译期展开,而编译期无法获取变量的值,递归函数的终止条件一定需要变量的值参与,所以递归函数不可能被处理为内联函数。
  • inline函数只是对系统的建议,建议系统将其视为内联函数。
  • inline函数在debug版本中生成的是局部符号(local),如果被处理为内联函数后在release版本不生成符号,直接在调用点展开。

符号

  • 所有的数据都会生成符号
  • 指令中只有函数名会处理为符号
  • 全局符号(global)所有的文件只要引用声明就可以使用。
  • 局部符号(local)只有本文件可见。

指针和数组名的区别

  • 数组 数组名 常量 39323987

  • 指针 变量

常量

在编译时期将常量的值直接写入到常量的使用点
常量的初始化必须使用常量,使用变量就会退化为常变量

const和指针

  • const修饰的值不能成为左值,不能泄露常量的地址给非常量的指针
  • const修饰的类型是离它最近的第一个成型的类型,其余是它修饰的内容
  • 如果const修饰的内容不包括指针,则无法参与类型

引用

  • 引用的底层是一个指针
  • 在使用到引用的地方,编译期会自动替换成为底层指针的解引用
函数是否可以展开调试是否有栈帧开辟可见区域是否生成符号是否有类型安全校验
宏函数预编译时期在调用点展开无法调试无栈帧开辟单文件可见不生成符号没有类型安全校验
static函数不展开可以调试有栈帧开辟单文件可见不生成符号有类型安全校验
内联函数debug版本不展开,release版本在调用点展开可以调试debug版本有栈帧开辟,release版本没有栈帧开辟单文件可见debug版本生成local符号,release版本不生成符号有类型安全校验
普通函数不展开可以调试有栈帧开辟多文件可见生成global符号有类型安全校验

函数重载

函数名相同,参数列表不同。

bool compare(int a,int b);
bool compare(float a,int b);
  • 函数重载是在编译时期决定究竟调用哪个函数。
  • c语言函数生成符号依赖函数名
  • c++生成函数符号依赖函数名与参数列表(返回值不影响)
class Person
{
public:
	int _age;
	int _sex;
	char *_name;
	Person()
	{
		_name=NULL;
		cout<<"Person()"< 

C与C++的互相调用

C++产生的函数符号(函数名+参数列表)
C语言产生的函数符号(函数名)

extern "C"//使用C语言的方式编译以下代码
  • 不需要建立存储空间,通过使用extern关键字声明变量名而不定义它。
  • extern int a 是变量的声明而不定义,其中a是可以在别的文件中再定义的
  • 如果将C++的函数符号改为C的函数符号,需要改动C++的源文件error
  • 添加自己实现的C++文件,写C++函数作为中间层去调用需要的C++函数,然后让自实现的C++函数产生C语言符号,之后进行C语言调用
面向对象

三大特性:封装、继承、多态。

this指针

  • 指向本对象的指针
  • 编译时期
    1.普通成员方法的第一个参数,默认加上this指针
    2.在普通成员方法内使用到普通成员的地方,加上this->
    3.在调用成员方法的时候加上参数this指针

构造函数

当对象进行构造的时候默认调用的成员方法。

  • 如果没有实现构造函数,系统会自动生成一个构造函数。
  • 当自己实现了构造函数之后,系统就不会生成默认构造函数了。‘
  • 默认构造函数是除了this指针以外没有参数的构造函数

析构函数
对象生存周期满了之后自动调用的成员方法。

  • 析构函数如果没有自己实现,系统会默认生成一个。
  • 生成的析构函数什么也不做,如果自己生成了,就不会再自动生成析构函数了。
~Person()
{
	if(NULL!=_name)
	{
		cout<<_name< 

拷贝构造函数

用一个已存在的对象给另一个正在生成的对象初始化时候自动调用的成员方法

  • 如果没有自己实现,会自动生成一个浅拷贝的构造。
  • 如果自己实现,就不会生成了。
  • 注意:拷贝构造函数一定要传引用(防止死递归),拷贝构造要防止浅拷贝

等号运算符重载

  • 当使用一个已存在的对象,给另一个已存在对象赋值的时候自动调用的成员方法
  • 如果不自己实现,就会自动生成一个浅拷贝的等号运算符重载函数
  • 如果自己实现,就不会生成了。
  • 注意:防止自赋值,防止内存泄漏,防止浅拷贝
Person&operator=(const char &src)
{
	cout<<"void operator=(const char &src)"<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/330125.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号