C++
关于c++的一些见解和学习
追梦偏执狂
在疯狂与不疯狂之间游荡,就很nice
展开
-
头文件中声明类
创建一个类://使用自己创建的类时,头文件用双引号("")mystring.h中: 1 #pragma once 2 /* 3 //在头文件中不建议放全局变量可以是类似于extern int a这种; 4 //在头文件中也不建议使用using namespace 等等; 5 //头文件中尽量不要包含#include<>其他头文件; 6 */ ///可能导致重复包含,文件运行慢或者出现异常 7 class mySt.原创 2021-05-12 23:01:15 · 1359 阅读 · 0 评论 -
内部函数和内部类
内部函数用inline关键字来表示内联函数,写法上和普通函数没有区别。内联函数不一定会起作用,系统会根据情况来决定是否关联。系统会在不影响真实使用的时候尽可能内联。一般用来修饰短小,频繁调用的函数。可以带来极大的优化。1、在内联函数内不允许使用循环语句和开关语句;2、内联函数的定义必须出现在内联函数第一次调用之前;3、类结构中所在的类说明内部定义的函数是内联函数。示例代码如下: 1 #include<iostream> 2 inline原创 2021-05-11 23:05:44 · 243 阅读 · 0 评论 -
C++头文件以及命名空间、编译原理
头文件C++头文件是#include<iostream> 类似于c中的#include<stdio.h>命名空间using namespace std; //命名空间提供了方便管理各种类名和全局变量的功能,C++官方库都在std命名空间下。(如果没有上面这句调用std命名空间的C++语句,则每次调用std命名空间里的函数时,就要在函数前加上"std::",例如,"std::cout"。)using std::cout;//表示只使用std::cout原创 2021-05-11 21:14:06 · 235 阅读 · 0 评论 -
类和类之间的关系
类是现实世界关系的抽象。对象是类的实例。类和类之间的关系根据语义,分为三类:泛化(Generalization) 继承 实现 依赖(Dependency) 关联(Association) 关联(Association) 聚合(Aggregation Association) 组合(Composition Association)语义: 关系 语义 泛化 ...原创 2021-05-12 22:41:29 · 53 阅读 · 0 评论 -
构造函数和析构函数以及初始化参数列表、匿名对象
构造函数是一种特殊的函数,函数名与类名相同,没有返回值;是C++引入的一个机制,专门用于初始化。C++保证每个对象被创建时都会调用构造函数。分为以下几种(默认构造和有参构造)默认构造如果没有显式的定义任何构造函数,系统会默认的生成一个无参构造函数(什么都不做)。当我们声明了任何一个构造函数后,系统不会生成默认构造函数。例如,(系统默认生成的无参构造函数) 1 class A { 2 public: 3 A() { 4原创 2021-05-13 15:15:05 · 675 阅读 · 0 评论 -
c++知识点概览
原创 2021-05-11 21:06:07 · 61 阅读 · 0 评论 -
隐式和显式构造
显示构造所有创建对象,并传入初始化参数的写法。例如, 1 NODE n(24); 2 NODE n(34,43); 3 new NODE(24,43);隐式构造C++有隐式构造的机制。当传递的参数不符合函数类型时,他会看其他重载函数需要的对象类型中,有没有单参数的构造函数能匹配传递的参数。如果匹配,就隐式构造一个该类型,然后调用这个函数。 1 #include<string> 2 #include<原创 2021-05-13 15:18:56 · 913 阅读 · 0 评论 -
异常机制、标准异常、动态数组溢出
异常:try catch throw异常机制,让小问题不至于退出程序,以及能及时得知一些问题出现的机制。当程序发生某些问题时,让程序出现一个可以捕获的“异常exception事件”,通过捕获这个事件,得到异常详细信息。try控制的代码范围内,如果有throw抛出异常,就可以被与try配套的后边的多条catch语句中符合条件的catch语句捕获。如果没有符合条件的catch语句捕获,就继续向上级抛出。代码:(略)标准异常:使用malloc申请空间地址,若申请空间地址失败,则返回0原创 2021-05-11 23:14:36 · 255 阅读 · 0 评论 -
重载运算符
重载运算符:c++可以将运算符转换为指定函数来调用。也就是,(c++提供一种机制,可以修改(对象和对象)或(对象和基本类型)之间的一些运算规则)运算符重载规则: 大部分运算符可以重载,除了少部分有特殊规则。不能重载的运算符有: . 成员访问运算符 .* , ->* 成员指针访问运算符 :: 域运算符 sizeof 长度运算符 ?: 条件运算符 # 预处理符号示例如下, 1 #include&l...原创 2021-05-12 23:42:13 · 1456 阅读 · 0 评论 -
宏函数
宏函数的优缺点:优点:性能高,代码展开在调用处缺点:因为本质上是文本替换,所以一不注意就会出现问题代码: 1 #define unsafe(i) ((i)>0?((i)+1):((i)-1) 2 //使用宏函数,在变量加(),以及在整个宏表达式都加(),来避免不必要的运算符优先级问题 3 int f(int i){ 4 5 }; 6 void userCode(int x){ 7 int ans; .原创 2021-05-11 23:00:16 · 196 阅读 · 0 评论 -
bool类型、string类型、引用类型
bool类型 bool a; //a的取值只有0(false)、1(true) bool是一种整型变量 bool 形式也可以为cout<<(3<7)<<endl; bool a=true; bool a=false; 例如, bool a=true; a=35; cout<<a<<endl; // a=1 a=0; cout<<a<<endl; //a=0第一种: b原创 2021-05-11 21:41:28 · 953 阅读 · 0 评论 -
浅拷贝、深拷贝构造函数
值传递 1 void Lswap(int a,int b){ 2 int tem = a; 3 a = b; 4 b = tem; 5 }main()中: 1 int a=3; 2 int b=7; 3 void Lswap(a,b);值传递三种方式:1、对象需要通过另外一个对象进行初始化2、对象以值传递的方式传入函数参数3、对象以值传递的方式从函数返回值.原创 2021-05-13 15:27:53 · 398 阅读 · 0 评论 -
函数指针和成员函数指针
函数指针一个指针,指向函数,就代表了用一个变量存储了函数的地址。 1 void run() { 2 3 } 4 void run1(int d) { 5 6 } 7 int main() { 8 void(*p)() = &run;//一个指针p指向了run函数 9 void(*f)(int) = &run1; 10 }成员函数指针:在类里的原创 2021-05-12 22:50:53 · 145 阅读 · 0 评论 -
函数名重载、函数缺省函数值
函数名重载函数名相同,函数传入的参数必须明确被调用的是哪一个函数。(传入参数不同:个数、顺序、类型(计算机要能识别出来))可以参考以下用例,代码如下: 1 void FUNC() { 2 3 } 4 void FUNC(string s) { 5 6 } 7 /* 8 void FUNC(int r){ 9 10 } 11 这个函数和下面参数是引用变量的函数只能调用一个(写一个),原创 2021-05-11 22:38:20 · 96 阅读 · 0 评论 -
cin和cout的使用
cin 1 cin的使用: 2 cin>>a; 3 cin和cout 都在std命名空间下 4 cin使用“>>”右移运算符表示输入,将">>"右边的内容输入 5 例如, 6 void qq() { 7 int b0; 8 cin >> b0; 9 cout << "刚才输入的整数是" <&原创 2021-05-11 22:17:02 · 7275 阅读 · 0 评论 -
vector向量组
向量(vector):是一个封装了动态大小数组的顺序容器。包含在头文件#include<vector>中。vector<int>varri;//动态数组不需要指定大小动态数组vector相关方法代码: 1 void qw() { 2 vector<int>varri; 3 vector<double>varrd = {3.0,2.8,5.6}; 4 vector<string>varr原创 2021-05-11 22:28:11 · 229 阅读 · 0 评论 -
const字面量优化、枚举
const字面量优化const//只读,必须初始化,一旦初始化不能更改,但是可以通过其他指针变量或者引用变量(C++中)来指向相同空间从而修改值。const字面量优化: 1 #define PI 3.1415 2 const double pi = 3.1415; 3 //c++关于const引入了一个优化,叫const字面量优化 4 //字面量优化:当const变量初始化为一个字面值时,c++把变量当成宏一样 5 const int ciz .原创 2021-05-11 22:54:28 · 193 阅读 · 0 评论 -
new和delete创建对象或数组
new和delete:局部变量存储在栈区,由系统来管理内存;大的内存必须用堆区来存储,但是需要程序员自己申请手动释放。//申请的内存必须释放C语言申请大内存用(void*)malloc(size_t);和free(void*);,其中malloc和free是直接申请和释放内存。//size_t:typedef unsigned int size_tC++中申请大内存用new和delete,其中new是先申请内存,后调用构造函数;delete是先调用析构函数,后释放内存。new原创 2021-05-12 23:32:41 · 587 阅读 · 0 评论 -
封装:访问修饰符 this指针
访问修饰符有三种:public、protected、private。struct和class区别非常小,struct默认所有成员访问修饰符是public。通过类中具有public访问修饰符的方法返回值,可以访问类中私有或者受保护成员。 1 #include<iostream> 2 using namespace std; 3 4 class A { 5 public: 6 int a=7; 7 int b;原创 2021-05-13 15:00:42 · 73 阅读 · 0 评论 -
C++和C的区别
问:能说一下C++和C的区别吗?扩展:问:请简要说明一下C++和Java的区别。问:请简要说明一下C++和python的区别。原创 2022-06-07 20:43:12 · 3886 阅读 · 2 评论 -
C++语言的特点有哪些
问:能说一下C++语言的特点有哪些吗?原创 2022-06-07 20:38:05 · 6991 阅读 · 0 评论 -
编译型语言和解释型语言
问:说一下编译型语言和解释型语言的原理、以及优缺点?原创 2022-06-09 09:05:47 · 169 阅读 · 0 评论 -
面向过程和面向对象的区别
问:简述一下面向过程和面向对象的区别。问:能说一下什么是面向对象吗?原创 2022-06-09 09:26:03 · 119 阅读 · 0 评论 -
简述一下面向对象的三大特性
问:简述一下面向对象的三大特性。参考:面向对象的三大特性是:封装、继承和多态。1、封装:封装隐藏对象的属性,并且外界只能通过对外提供的接口进行访问,这个对外提供的接口一般是指get方法。2、继承:子类可以复用父类的成员和方法,并且可以在现有代码的基础上进行功能扩展。3、多态:表现形式是,子类对象父类指针,通过父类创建的指针来调用子类的成员和方法,实现了接口的重用。 多态分为静态多态和动态多态。............原创 2022-06-09 09:46:41 · 9063 阅读 · 0 评论 -
多态的实现原理
问:简要阐述一下多态的实现原理。参考:多态的实现分为静态多态和动态多态的实现。1、静态多态主要是同名函数的重载,在编译的时候就已经确定。编译器会根据函数实参的类型(可能会进行隐式类型转换),来确定具体调用哪个函数,如果有对应的函数就调用该函数,否则会出现编译错误。2、动态多态主要是父子类同名函数的覆盖,运行时的多态,是用虚函数机制实现的,在运行期间动态绑定。编译器在编译的时候,会为每个包含虚函数的类创建一个虚表和虚表指针。该表是一个一维数组,在虚表中存放了每个虚函数的地址。程序运行时,会根据对象的实原创 2022-06-10 10:16:01 · 3444 阅读 · 0 评论