当前位置:   article > 正文

C++_QF_c(qf

c(qf

C++

基础部分

关于C++头文件:

一般不加.h,如果是自己定义的头文件则需要加.h;C语言加.h;在C++中使用C语言的头文件一般前面加C 例如:Cmath

C面向过程:

自顶向下,逐层细化。

多态:

​ 一个接口,多种方法。在程序运行时才能决定调用的函数。

​ 动态多态:运行时确定函数地址

​ 静态多态:函数重载,运算符重载。编译期间多态。

命名空间解决命名冲突:
namespace A{
	int a=10; // 命名空间只能在全局范围内定义。
}
用法:A::a
  • 1
  • 2
  • 3
  • 4
  • 命名空间的嵌套:都是属于全局变量的。

    A::B::a
    
    • 1
C/C++结构体区别:

c++结构体①可以有成员函数②使用时不需要加 struct 关键字; C语言反之

C++含有bool类型:

C++中true为整数1,false为0;bool类型占据1字节大小,即1Byte=8bit;

C89没有bool类型,

const在C/C++的区别:

​ const修饰的局部变量在C语言中意为一个只读的变量,但是可以通过指针间接的修改它的值。全局变量不可以!

在c++中:(可修改但:)

​ 1、对于基础数据类型,也就是const int a=10;编译器会把它放在符号表中,不分配内存,当对其取地址时,会分配内存。在使用时,如果用的是指针则取内存中的数值,如果用的是变量名则取符号表中的数值。两者值不同。

​ 2、如果以变量的形式初始化const修饰的变量,系统欧冠会为其开辟空间

int b=10;
const int a =b; //系统会给a开辟内存。不会把a放入符号表中
  • 1
  • 2

​ 3、const 自定义数据类型(结构体,对象)系统会分配空间。

​ const修饰的全局变量默认是内部链接,(只在当前源文件内有效 不能直接作用与别的源文件中) 如果 想要用在其他源文件中需要添加extern将其转换成外部链接。

引用:(起别名)
int num =10;
int &a=num; //①引用必须初始化②引用一旦初始化就不能再次修改别名。			
  • 1
  • 2
  • ①引用必须初始化
  • ②引用一旦初始化就不能再次修改别名。

主要应用于作为函数的参数

数组的引用1

    int arr[5]={1,2,3,4,5};
    int (&my_arr)[5]=arr;//加()是考虑中括号优先级问题		
  • 1
  • 2

数组的引用2:用typedef 给数组类型取别名

typedef int TYPE_ARR[5];
int arr[5]={1,2,3,4,5};
TYPE_ARR &myArr =arr;  //myArr就是arr的别名。
  • 1
  • 2
  • 3

​ TYPR_ARR 就是一个数组类型(有5个元素 每个元素位 int)

·引用作为函数的返回值类型
  • 不要返回局部变量的引用: 因为局部变量在栈区,生命周期短。
  • 函数的调用可以作为左值 :加static解决上面的问题。
·引用的本质是一个常量指针:
int *const ref =&a;
  • 1
·常量引用

常量引用主要用来修饰形参,防止误操作。

在函数形参列表中,可以加const修饰形参,防止形参改变实参。

常量指针和指针常量:

1、常量指针:指针的指向可以修改,指向的值不可以修改。

2、指针常量:

int a=10;
int b =20;
const int *p1 = &a; //常量指针:指针的指向可以修改
						改:	p1 = &b;
int *const p2 = &b; //指针常量:指针指向的值可以修改
						改:  *p2 = 10;
				
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
重载:

​ 同一个作用域内,函数名相同,参数列表不同。

–常引用参数重载–
void func(int &a)
void func(const int &a)  常引用做重载条件
  • 1
  • 2

​ class和struct的区别:默认访问权限不同:class-private;struct-public

构造-析构-拷贝构造

​ 拷贝构造:(拷贝构造函数不能初始化匿名对象)

Student(const Student &s);
  • 1
拷贝构造三种调用时机:

1、使用一个已经创建完毕的对象来初始化一个新对象。

2、值传递方式给参数传值。

3、值方式返回局部对象。

深拷贝和浅拷贝:

​ 浅拷贝:增加了一个指针指向已存在的内存地址。

​ 深拷贝:自己在堆区new了一块内存,并生成一个指针指向这块内存。

~Person()
{
    if(heght != NULL)  //手动释放堆区内存。
    { 
     delete m_Height;
     m_Height =NULL; //指向空,防止野指针。
    }        
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/833902
推荐阅读
相关标签
  

闽ICP备14008679号