Hello,大家好!我是木荣。温故而知新,可以为师矣。作为一名攻城狮,扎实的基本功是解决问题及完成工作中任务的重要前提。没有良好的基本功作为铺垫,一味的追求知识的宽度是毫无意义,知其然更要知其所以然。因此,在平时和小伙伴们聊天时,在谈到学习技术方面的问题,我会告诉他们注重基本功。所以,最近文章会总结一些日常编程工作中常用的重要基本知识点,根据平时工作中常用的也是重要的知识点逐步展开。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
成员指针是C++引入的一种新机制,它的申明方式和使用方式都与一般的指针有所不同。成员指针分为成员函数指针和成员数据指针。
成员指针是 C++ 引入的一种新机制,它的申明方式和使用方式都与一般的指针有所不同。成员指针分为成员函数指针和数据成员指针。
全局(静态)存储区:分为data段和bass段。data段(全局初始化区)存放初始化的全局变量和静态变量;bass段(全局未初始化区)存放未初始化的全局变量和静态变量。程序运行结束时自动释放。其中bass段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在程序执行之前已经为0。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。
function包装器也叫做适配器,C++11中的function本质是一个类模板,也是一个包装器。
那大家可能有疑问了? 之前函数体内赋值不是用的好好的嘛,来这个干嘛? 现在就来解释:
🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:深入理解构造函数,介绍友元函数,内部类等等
该文章介绍了static关键字在C++中的使用,主要包括static成员变量、static成员函数以及类/对象大小的计算。static成员变量是类的静态成员变量,可以通过类名直接访问,可以避免重复定义和静态链接库等问题。static成员函数是类的成员函数,可以在类外定义和实现,具有静态绑定和链接特点。类/对象大小的计算需要考虑类的成员变量和成员函数的存储空间,虚函数和虚继承等因素也会影响类的大小。
在最开始C中引入了static关键字可以用于修饰变量和函数,后来由于C++引入了class的概念,现在static可以修饰的对象分为以下5种:
C++类静态数据成员与类静态成员函数 在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢? 这个问题便是本章的重点: 声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数。 下面我们用几个实例来说明这个问题,类的成员需要保护,通常情况下为了不违背类的封装特性,我们是把类成员设置为protected(保护状态
一、类静态成员(static) 先介绍一下什么是静态变量、静态函数 静态局部变量:存在域(全局数据区),作用域(块作用域) 静态全局变量:存在域(全局数据区),作用域(整个文件) 静态函数:存在域(全局数据区),作用域(整个文件) static int a=10;//全局静态变量 static void add();//静态函数 int main() { { static int b=10;//局部静态变量 } } 特点: 静态static修饰的变量、函数,只需要初始化一
当与不同类型一起使用时,Static关键字具有不同的含义。我们可以使用static关键字:
如果你正处在学校,那么一定会接触到学生、老师、食堂阿姨、保安大叔……如果将其都转化成计算机语言,那么每一类人都属于一个类:
在我们学习数据结构的时候,我们总是要在使用一个对象前进行初始化,这似乎已经成为了一件无法改变的事情,如以下的Data类
1. 继承是面向对象语言进行代码复用的一种手段,以前我们所接触的代码复用都是函数复用,譬如模拟实现vector的时候,尾插尾删都是复用了insert和erase接口。而继承提供的是一种类设计层次的代码复用,在原有类中增加扩展并实现新的功能,这样所产生的类叫做派生类或子类,原有类被称为基类或父类。
C++中多继承是指一个子类可以从多个父类中继承属性和行为. 其中涉及菱形继承和虚拟继承,显得复杂很多. 需要理解原理.
我们知道,类对象定义时会自动调用类的构造函数完成对类对象成员变量的初始化。 前文我们并没有对构造函数进行进一步的探讨,即类对象创建时类成员变量具体是在构造函数哪里初始化的? 其实,构造函数内对成员变量赋值的操作并不能称之为对成员变量的初始化,而是只能称之为对成员变量赋初值。
C语言中定义一个静态变量和静态函数主要是为了满足某个文件的需求 比如我们在文件List.c中定义 static int count = 0; //静态变量 static int get_last_node(List *Head);//定义静态函数
对于既有成员缺省值,又有默认构造函数(初始化列表和函数体赋值)时,对象创建时会先走初始化列表,再走函数体赋值,最后走成员缺省值
虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。
比较重要的是前4个,后两个的用处并不大,默认的成员函数就是我们不写编译器会生成一个默认的。
(为了方便记忆可以想成)被 const 修饰(在 const 后面)的值不可改变,如下文使用例子中的 p2、p3。
为账户类Account增加一个友元函数,实现账户结息,要求输出结息后的余额(结息余额=账户余额+账户余额*利率)。友元函数声明形式为 friend void Update(Account& a);
我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。 静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化,如下面的实例所示。
智能指针 在C++库中最重要的类模板之一 智能指针实际上是将指针封装在一个类里,通过对象来管理指针. STL中的智能指针auto_ptr 头文件: <memory> 生命周期结束时,自动摧毁指向的内存空间 不能指向堆数组(因为auto_ptr的析构函数删除指针用的是delete,而不是delete[]) auto_ptr的构造函数为explicit类型,所以只能显示初始化,比如: auto_ptr<int> ap1(new int(1)); //初始化正确,创建ap1类模板对象,使类模板里的指
继承 (inheritance) 机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称做派生类/子类;继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程;以前我们接触的复用都是函数复用,继承是类设计层次的复用。
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类 。而以前我们接触的复用都是函数复用,继承是类设计层次的复用。
继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
相信大家对于继承这个词应该都不陌生,所以在这篇文章的学习之前,大家可以先联想一下现实生活中的继承是怎么样的。
一、类模板与模板类 类模板:一个模板(是模板) 模板类:调用类模板生成的类对象(是类实体),也称为类模板的实例化 类模板的定义: 与函数模板的定义是一样的 template <typename T>class Blob{public:Blob();Blob(std::initializer_list<T> i);}; 模板类的使用: 在定义类时,使用到类名的地方都需要显示的给出模板类的类型,格式为<> int main(){Blob<int> ia;Blob<int> ia2 = { 1,2,3 };Bl
如上图,在一般情况下,我们认为A类中的_a1和_a2只不过是声明,并没有开空间,而真正的空间开辟是在【定义】的时候,也就是我们根据这个类实例化出整个对象的时候。
普通函数指针:返回值类型(*指针名)(参数列表) 注意:void( * p_fun)(int,int);和void * p_fun(int,int);的区别 前者是定义函数指针,后者是函数声明(指针函数)
面向对象程序设计(Object-Oriented Programming,OOP)是一种新的程序设计范型。程序设计范型是指设计程序的规范、模型和风格,它是一类程序设计语言的基础。
举个例子: 在定义类的时候,内部的成员甚至成员函数都有相同之处,假设我定义,学生,老师,导员,院长,校长等等,他们都有共同的特性,名字,性别,年龄等等,不相同的有学号,工号等等。 那么如果像往常一样去定义,会写很多重复的内容。 这时候C++就提供了一种语法叫做继承。 继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。
在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值,以我们之前实现的Date类对象为例。
The Boost C++ Libraries 本博客是Synchronizing Threads的一篇译文。关于《The Boost C++ Llibraries》一书的在线完整书的目录,参见The Boost C++ Libraries,Boost库的官网地址是:https://www.boost.org/,翻译这篇博文时Boost库的最新版本是1.73.0
继承(inheritance)机制是面向对象程序设计,使代码可以复用的最重要的手段。它允许程序员在保持原有类特性的基础上进行扩展,以增加功能。这样产生新的类,称为派生类。
C++进阶-继承 零、前言 一、继承的概念和定义 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承和友元 六、继承和静态成员 七、菱形继承和虚拟继承 八、继承和组合 九、继承相关面试题 零、前言 从本章开始,我们已经达到了C++的入门水平,开始向进阶进发,而本章则是介绍学习C++的继承 一、继承的概念和定义 概念: 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生
static 定义的静态局部变量分配在数据段上,普通的局部变量分配在栈上,会因为函数栈帧的释放而被释放掉。
通常来说,一个日期是由三部分构成的,分别是:年,月,日。由此,日期类的成员变量就很好制定,即三个整形,分别为:_year,_month,_day,如下:
但是:这种方法会影响运行时的性能,而且对与支持 older_than函数对象的所有类都必须强制继承这个超类,破坏了封装性。
了解你所使用的编程语言究竟是如何实现的,对于C++程序员可能特别有意义。首先,它可以去除我们对于所使用语言的神秘感,使我们不至于对于编译器干的活感到完全不可思议;尤其重要的是,它使我们在Debug和使用语言高级特性的时候,有更多的把握。当需要提高代码效率的时候,这些知识也能够很好地帮助我们。
领取专属 10元无门槛券
手把手带您无忧上云