c++
文章平均质量分 59
melody_jae
这个作者很懒,什么都没留下…
展开
-
c++中的单继承,多继承(此处着重讲菱形继承)的内存布局模型详解
最近正好复习到继承的相关部分,想着把自己所学的东西还是再次归纳整理一遍,那么接下来就简单地梳理一下关于继承的一些知识点。切入正题,什么是继承?“继承是c++语言的一种重要机制,该机制自动地为一个类提供来自另一个类的操作和数据结构,使得程序员只需在新类中定义已有类中没有的成分来建立新类”对没错这是书本的官方解释,相信你看了之后还是和我一样一脸懵逼没有任何感觉(就不能解释的通俗一点嘛,卖萌脸)。下原创 2016-10-29 20:13:25 · 1474 阅读 · 0 评论 -
关于“编译器会生成默认的构造函数”之剖析
开篇先列一下本篇文章要解释的几个知识点背景:我们知道,如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数。本节剖析:(1)如果没有显式定义,编译器真的会生成默认构造函数吗?(2)在什么场景下,编译器会生成默认构造函数,什么场景下不会?以一个简单的日期类来探索今天的主题例1:class Date{public:private: int...原创 2018-12-20 18:14:21 · 1520 阅读 · 1 评论 -
统计一个类中,创建出了多少个类对象
方法一:全局变量//方法一:全局变量int _count = 0;class A{public: A() { _count ++; } A(A&a) { _count++; } ~A() { _count--; } void GetCount() { cout << _count <&...原创 2018-12-22 15:27:02 · 4182 阅读 · 0 评论 -
设计一个类,只能在堆上创建对象
设计一个类:只能在堆上创建对象//思路:说明不能在栈上创建对象,考虑到栈上创建对象会发生哪些事://(1)构造函数(2)拷贝构造 //所以先屏蔽掉构造函数,即设为私有。存在问题:在堆上创建对象也会调用构造函数,设为私有对其有影响//解决:提供成员函数接口,在成员函数中创建堆对象。存在问题:成员函数需要对象来调用,现在无法创建对象//解决办法:设为静态成员函数,这样就不依赖于对象调用/...原创 2018-12-28 21:42:30 · 233 阅读 · 2 评论 -
设计一个类,只能在栈上创建对象
设计一个类,只能在栈上创建对象//思考的几个要点://(1)只能在栈,说明不能在堆上创建,考虑堆上创建对象的两种方法-->new和定位new表达式,原理-->先调用operator new开空间,然后执行构造函数//所以屏蔽掉operator new(即放成私有)这样就排斥了直接new和定位new表达式//注意:上面的方法只能排斥掉在堆上创建,但是在全局区仍然可以//(2)防...原创 2018-12-28 21:46:54 · 203 阅读 · 1 评论 -
const_iterator 与 const类型的iterator
每一种容器都会定义自己的迭代器类型,这里以vector中的begin函数为例std::vector::beginiterator begin();//返回普通类型的迭代器const_iterator begin() const; //返回const_iterator类型的迭代器那么const_iterator 与 const类型的iterator有什么区别呢?#include...原创 2019-01-03 20:57:49 · 419 阅读 · 1 评论 -
深拷贝与浅拷贝
深拷贝的实现:方式一:#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>using namespace std;#include<stdlib.h>#include<assert.h>//深拷贝class String{public: //正确写法一: /*String(co...原创 2019-01-02 21:05:51 · 191 阅读 · 0 评论 -
this指针
背景首先来看一下在C语言中,我们定义一个结构体,如何通过函数实现对结构体成员的赋值?答案当然是通过传指针的方式;在实参中传入变量的地址,就可以达到在函数中修改变量各个成员内容的效果。方式如下:#include<stdio.h>#include<stdlib.h>#include<string.h>struct Student{ cha...原创 2018-12-14 17:04:46 · 413 阅读 · 0 评论 -
关于模板函数重载中对象实例化的问题
最近在学习模板方面的知识,把一些知识点总结一下=======================================================================在一段代码中,当一个非模板函数可以和一个同名的函数模板同时存在时,调用时究竟会调用哪一个?那么我们下面用一个简单的例子验证一下#includeusing namespace std;#includ原创 2016-11-13 11:56:47 · 468 阅读 · 0 评论 -
const修饰成员函数及其相关
为了更清晰明了的引出本篇博客所要探讨的问题,还是以一段代码作为开端(一个简单的日期类)class Date{public: Date(int year=1900, int month=1, int day=1) :_year(year) , _month(month) , _day(day) { cout << "Date()" << endl; } Date(co原创 2017-02-02 17:41:19 · 451 阅读 · 0 评论 -
c++中的友元
通过之前所学内容,我们知道,在c++中,由于类具有的封装性和信息隐藏的特性,所以我们访问私有成员时通常以类的成员函数作为接口,因为程序中的其他函数是无法访问类中的私有成员的;那么如果就是想要不采用这种方式,还有什么办法可以访问到类的私有成员呢?这就引出了本篇博客所讲的重点:友元(一)友元函数首先来看下面一段代码:#includeusing namespace std;#includ原创 2017-02-04 22:47:50 · 249 阅读 · 0 评论 -
深度解析-->c++中构造函数,拷贝构造,赋值运算符重载,析构函数的调用情况
前言: 经过前面对类的认识,构造函数,拷贝构造,运算符重载,析构函数这些知识的学习,相信我们对c++已经有了一个初步的认识;那么本篇博客在前面的基础上,来对这些知识做一个综合性的整理,同时也是考察我们对其的掌握程度(例1):class Date{public: Date() { cout << "Date()" << endl; } Date(cons原创 2017-02-07 20:28:55 · 815 阅读 · 0 评论 -
类的静态成员
开门见山--->本篇博客我们主要讲:类的静态成员及其相关由于之前学习c语言的时候大家对static关键字想必并不陌生,而本篇博客我们依旧需要用到static,只不过是更深入的运用。按例,首先还是以一段简单的代码来回顾一下:#includeusing namespace std;#includeint a = 0;static int b = 0;//链接属性void f(){原创 2017-02-06 15:21:45 · 367 阅读 · 0 评论 -
浅谈c++中函数的重载
当初学习C语言时,我们在平时的编程中时常用一个函数来实现某种功能,但有时会发现这会有缺陷;最典型的例子:实现两个数的相加求和。当输入的数为不同类型,相应的必须针对各种类型实现不同的函数(且函数名不能一致)这就无形中添了很多麻烦,因为每次调用时都要自己根据输入的类型来判断究竟调用哪一个函数。而c++就很好的解决了这一问题,这里不得不提到一个重要的概念:函数的重载;它允许用同一函数名定义多个函数,调用原创 2017-01-17 12:42:26 · 376 阅读 · 0 评论 -
动态内存管理
在C 语言中,我们使用m alloc /calloc /r ealloc /fr ee进行动态内存管理,而在c++中,则更为简单;C + + 通过new和delet e动态管理内存。new / delet e动态管理对象。new [] / delet e[]动态管理对象数组。这里要强调一点:malloc/free、new/delete、new[ ]/delete[原创 2017-02-08 16:55:36 · 365 阅读 · 0 评论 -
C语言和C++中的函数命名规则
c语言函数命名规则例1:#include<stdio.h>#include<stdlib.h>int Add(int left, int right);//函数声明int main(){ Add(1, 2);//编译器在找的时候修饰为_Add}可以看到,编译器在找函数时并不是直接找Add的,而是找的是_Adddouble Add(double...原创 2018-12-12 20:45:29 · 3985 阅读 · 1 评论 -
理解虚继承
本篇博客主要对继承的对象模型以及虚拟继承进行一个整理和总结。单继承方式一:单级派生//单继承class A{public: int _a;};class B :public A{public: int _b;};int main(){ B b; b._a = 1; b._b = 2; return ...原创 2019-01-27 19:11:19 · 644 阅读 · 1 评论