C++易错知识点
文章平均质量分 57
记录C++易错知识点
橡秄
我亦无他,唯手熟尔
展开
-
C++易错知识点笔记(十四)函数指针
函数指针这个东西用的比较少,但是却是必须知道的一个内容,以前我只是大致了解了一下函数指针,毕竟没有怎么用过,今天别人给我一个题目我竟然没有反应过来,实在是不应该,因此专门写一个博客记录这个知识点。1,函数指针基本概念如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。2,函数指针的定义举个例子int(*p) (in原创 2022-02-28 20:31:38 · 488 阅读 · 0 评论 -
C++易错知识点笔记(一)const关键字
一,const常量const的意思是常量const float PI=3.14;PI=3;//会报错,PI不可修改注意1,常量定义以后不能再继续赋值,所以在定义时最好顺便初始化。2,常量不能赋值的确切意思是不能在编译过程中赋值,而不是说在运行过程中不能赋值。在运行过程中如果通过操作指针,同样可以对该变量赋值,但一般用不上这种操作,如下:通过该例子再体会一下指针直接修改内存的作用。float* p=(float*)Πfloat input;cin>>input;原创 2022-01-01 15:28:21 · 713 阅读 · 0 评论 -
C++易错知识点笔记(二)默认参数,内联函数
默认参数1,什么是默认参数C++的参数可以在参数列表中直接赋值作为默认参数,且只能在后面几位参数赋值,即只有后面几位参数可以作为默认参数。2,默认参数的使用默认参数可以写在声明或者定义任意一处,一般写在声明处,因为声明处可以暴露给其他人,而实现部分一般是程序员自己知道的。例如:声明:int M_ParaMetre(int n1, int n2, int n3 = 1, int n4 = 2);实现:int `M_ParaMetre(int n1, int n2, int n3,int n4原创 2022-01-01 17:23:53 · 189 阅读 · 0 评论 -
C++易错知识点笔记(三)引用
什么是引用在函数进行参数传递的时候,函数内部的变量为局部变量,作用域为该函数本身,除了函数的return值,函数里的其他变量的值都不能出这个函数。例如:int GetAdd(int a,int b){ a=a+1; b=b+1; return a+b;}当使用GetAdd(x,y)语句调用该函数后,智慧返回(x+1)+(y+1)的值,而x与y本身的值在函数调用过后+1;事实上函数声明中的a,b只是形式参数,在函数调用过后a,b会在函数体内部开辟内存,用x,y初始化,之后a,原创 2022-01-01 19:05:12 · 299 阅读 · 0 评论 -
C++易错知识点笔记(四)名字空间
作用域1,全局作用域, 名字空间域2,局部作用域,块作用域3,类域数据隐藏在不同的作用域可以定义多个相同名称的变量,在访问时只访问本作用域的变量,屏蔽更大作用域的变量。名字空间1,一种作用域的划分,通常用于区分项目中的模块与组件,可以在命名空间中定义变量与函数。(1)定义namespace U_fun1{ int age=10;};//命名空间U_fun1中有一个变量agenamespace U_fun2{ int age=11;};//命名空间U_fun2中也有原创 2022-01-02 13:00:38 · 328 阅读 · 0 评论 -
C++易错知识点笔记(五)写一个类的例子记忆类的正确书写,成员权限,构造函数,析构函数,深拷贝与浅拷贝
这里写一个钟表类,读者可以通过复制整个代码到vs中运行试验,从这个例子中记忆1,关注类的简单语法2,关注类的成员变量一般私有3,关注类的构造函数的一般写法与调用#include<iostream>using namespace std;class CClock{private://private表示只能类内访问 int m_Hour; int m_Minute; int m_Second;public://表示类内与类外都都可访问,还有protect权限与继承有关,在后面原创 2022-01-02 17:13:35 · 334 阅读 · 0 评论 -
C++易错知识点笔记(六)写一个父类,子类,友类;帮助理解记忆继承中涉及的问题
这里写一个CPerson为父类,Student类为子类,Friend_Mate为Student的友类,详情见代码,读者可以将代码复制到vs当中试验继承中涉及到的各种知识点,在阅读下面代码的过程中记得关注:1, 注意继承的基本语法2, 注意继承的可见性我们认为public权限>protected权限>private权限。父类的私有成员被子类继承以后不论哪种继承方式都不可见,父类的其他成员被子类继承以后子类的权限变为min权限{该数据成员在父类中的权限,继承方式} 。例如子类保护继承了父类的原创 2022-01-04 01:39:45 · 511 阅读 · 0 评论 -
C++易错知识点(七)一步一步理解虚函数与多态的概念和本质
先编写一个代码说明一下多态现象:#include<iostream>using namespace std;class CPerson {public: int mid; virtual void speak() { cout << "说人话" << endl; } CPerson(){ mid = 0; cout << "父类构造" << endl; };};class CChinese:public CPe原创 2022-01-11 16:16:28 · 263 阅读 · 0 评论 -
C++易错知识点笔记(八)常成员函数,常成员变量及初始化列表,静态成员变量,静态成员函数
1,常成员函数常成员函数意味着该函数内部不能修改类成员变量,而一个类当中一般都有getdata这样的函数暴露数据成员的接口,所以一般来说像get之类返回类的数据成员的函数,它的内部不会涉及到类成员变量的修改,这时候建议将这样的函数声明为常成员函数。...原创 2022-01-11 19:41:28 · 593 阅读 · 0 评论 -
C++易错知识点笔记(九)学了静态成员函数,现在尝试写一个单例模式
单例模式是指一个类只能创建一个类对象,本文从第一种单例模式的写法开始介绍,后一种单例模式均是对前一种单例模式可能出现的问题的改进,写法大同小异,读者可跟随文章一起分析。第一种单例模式#include<iostream>using namespace std;class Clog {private: static Clog* ptr; Clog() = default;public: //唯一的创建类的接口 static Clog* createObject(){ if(p原创 2022-01-12 17:04:59 · 173 阅读 · 0 评论 -
C++易错知识点笔记(十)友元
一,友元1,分类1)友元全局函数2)友元类成员函数3)友元类2,作用可以访问类的私有成员3,缺点破坏了类的封装性和类的隐藏性4,用途不推荐使用,在某些方面,如运算符重载和某些设计模式时可酌情使用。5,用一个例子演示三类友元class B {public: void bfoo();};class C {public: void cfoo1(); void cfoo2();};class A {private: int privateData;public: f原创 2022-01-13 10:59:44 · 260 阅读 · 0 评论 -
C++易错知识点(十一)虚析构函数
首先来看这样一个场景,观察构造析构的调用析构顺序。#include<iostream>using namespace std;class Parent{private: int a;public: Parent() { cout<<"Parent()"<<endl; } ~Parent() { cout<<"~Parent()"<<endl; }};class son :public Parent {private: int原创 2022-01-13 11:29:03 · 292 阅读 · 0 评论 -
C++易错知识点(十二)纯虚函数与抽象类,多重继承,菱形继承与虚继承
1,纯虚函数与抽象类纯虚函数是指一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。存在纯虚函数的类就是抽象类。在类里纯虚函数的声明:virtual void test() = 0;2,多重继承一般的子类都有唯一一个父类,多重继承是指一个子类可以继承多个父类。例如:如下所示:son作为子类,继承了父类Parent1与Parent2。class Parent1{private: int Paren原创 2022-01-13 15:40:11 · 265 阅读 · 0 评论 -
C++易错知识点(十三)在成员函数或者构造函数内部调用虚函数
我们已经知道,虚函数的间接调用是指通过指针调用一个虚函数会查对应对象的虚函数表完成函数调用的过程,而使用指针调用一个类的普通成员函数不会有间接调用即多态出现。那么使用指针调用的这个普通成员函数类内部有虚函数的调用会怎样呢?如果是构造函数内部呢?1,当普通成员函数内部有虚函数调用时直接编程查看结果看看是否有虚函数的多态。#include<iostream>using namespace std;class A {public: virtual void test() { cout &原创 2022-01-14 15:47:40 · 560 阅读 · 0 评论