c++
文章平均质量分 68
audience_fzn
这个作者很懒,什么都没留下…
展开
-
类和对象(一)——类&对象概念及定义
c++是基于面向对象的语言,并不是纯面向对象的语言,因为它包含c的部分,c是面向过程的语言一、面向对象概念:面向对象程序设计(OOP)是一种程序设计的泛型,同时也是一种程序开发的方法,它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性二、类和对象的概念1. 类:类是现实世界在计算机中的反映,它将数据和对这些数据的操作封装在一起(并没有开空间)2. 对象:类的实例(...原创 2018-05-22 00:09:19 · 72886 阅读 · 7 评论 -
内存对齐(struct ,calss)、位段
一、内存对齐:编译器将程序(class ,struct,union)中的每个数据(成员变量)安排在适当的位置上。许多编译器对数据在内存中的存放顺序是有限制的,他们要求这些数据的首地址必须是某个数的整数倍(通常为4/8)二、为什么要内存对齐?1.平台原因不是所有硬件平台都可以访问任意地址上的任意数据,某些平台只能在某些地址处取一些特定的数据,否则会抛出硬件异常(编址并不是对所有的内存进行编址,所以有...原创 2018-05-24 20:49:24 · 579 阅读 · 0 评论 -
类和对象(二)——this指针
一、隐含的this指针1.每个成员函数都有一个指针形参,它的名字是固定的,称位this指针(构造函数没有)2.在对象调用类中的函数时,编译器会自动将对象的地址作为实参传给成员函数的第一个形参—this指针3.this指针是成员函数隐含的指针形参,编译器自己会处理,我们不能自己在定义shi成员函数的形参中添加this指针,也不能在调用时对比C,C++,了解this指针的作用二、__thiscall的...原创 2018-05-24 22:17:21 · 851 阅读 · 0 评论 -
类和对象(三)——默认成员函数
C++类中含有六个默认成员函数一、构造函数构造函数的特征1. 函数名与类名相同,无返回值2.构造对象时编译器自动调用,且只调用一次3.可重载,实参决定了调用哪个4.若没有定义,编译器会自动提供5.有初始化列表(可以不用)6.无参/带有缺省值的构造函数都是缺省构造函数,缺省构造函数只能有一个class Date{public: Date(int year,int month,int day)...原创 2018-05-24 23:29:59 · 498 阅读 · 0 评论 -
C++——内联,友元
一、内联(inline)以inline修饰的函数叫内联函数,编译时c++编译器会在调用内联函数的地方将其展开,没有函数压栈的开销,内联函数提升程序运行的效率。inline时一种以时间换空间的做法,省去调用函数的开销,所以代码很长或内部有循环,递归的函数不适宜使用内联 inline对编译器只是一个建议,编译器会自动优化。如果定义为inline的函数体内有循环/递归等等,编译器优化时会忽略掉...原创 2018-08-06 11:00:16 · 316 阅读 · 0 评论 -
构造函数,拷贝赋值函数的N种调用情况
一、 class Date{public: Date()//构造函数 { cout << "Date()" << endl; } Date(const Date& d)//拷贝构造 { cout << "Date(const Date& d)" << endl; } Date&原创 2018-08-06 12:13:40 · 206 阅读 · 0 评论 -
C++动态内存管理——new/delete
1.c语言的动态内存管理malloc:动态开辟指定大小的空间,返回值是void* ,所以要自己指定返回的数据类型 int *ptr = (int*) malloc (10*sizeof(int)); calloc:动态开辟指定大小的空间,与malloc不同的是它会进行初始化 int* ptr = (int*)calloc(10,sizeof(int)); realloc: 为动...原创 2018-08-06 18:18:26 · 243 阅读 · 0 评论 -
c++继承,隐藏(重定义)
继承是面向对象复用的重要手段,通过继承定义一个类,继承是类型之间的关系模型。共享公有的东西,实现各自本质的不同的东西。一、三种继承关系public:公有继承 protected:保护继承 private:私有继承实现一个简单的继承关系:继承是一种复用的手段,在继承关系里基类(父类)的成员都会成为派生类(子类)的成员,由此达到复用的目的三种继承关系下基类成员在派生类的访问关系...原创 2018-08-06 20:42:23 · 543 阅读 · 0 评论 -
继承关系里的六个默认成员函数
在继承关系里,如果子类里没有显示定义这六个成员函数,编译器会默认合成的函数实现一个继承关系里的默认成员函数class person{public: person(const char* name) :_name(name) { cout << "person()" << endl; } person(const person& p)...原创 2018-08-06 21:31:35 · 311 阅读 · 0 评论 -
菱形继承,虚继承
一、单继承和多继承单继承:一个子类只有一个直接父类时,称这个继承为单继承 多继承:一个子类有俩个或以上的直接父类时称这个继承关系为多继承单继承:可以有多个父类,但是只能由一个直接父类多继承:二、菱形继承: 菱形继承的例子:class person{public: string _name;};class student : public per...原创 2018-08-06 23:21:15 · 1299 阅读 · 0 评论 -
虚函数,虚函数表
一、虚函数:虚函数——类成员函数前面加virtual关键字,则这个成员函数称为虚函数 虚函数重写:当在子类里定义了一个和父类完全相同的虚函数时,则称子类的这个函数重写(覆盖)了父类的这个虚函数。 重写就是将子类里面虚函数表里的被重写的父类函数地址全都改成了子类函数的地址虚函数覆盖(重写)class person{public: virtual void BuyTickets(...原创 2018-08-07 10:48:35 · 284 阅读 · 0 评论 -
C++——多态
1.什么是多态?多态简单的讲就是“一个接口,多种方法”,程序在运行时才决定调用的函数,他是面向对象的核心概念。当多态应用形参的数据交,可以接受更多的类型,当多态用于返回值类型的时候,可以返回更多类型的数据,多态可以让你的代码拥有更好的扩展性构成多态的条件继承的存在 子类要重写父类的虚函数 父类的指针/引用调用重写虚函数什么是重写:不在同一作用域内(分别在父类和子类中) 基类...原创 2018-08-07 13:03:41 · 384 阅读 · 0 评论 -
C++——模板
概念:模板是泛型编程的基础,所谓泛型编程就是编写与类型无关的逻辑代码,是一种复用的方式。模板将类型定义为参数,从而实现了真正的代码可采用性模板分为模板函数和模板类一、模板函数假设现在要实现一个比较俩个数是否相等的重载函数int IsEqual(int a, int b){ return a == b;}bool IsEqual(const string& le...原创 2018-08-08 16:12:31 · 158 阅读 · 0 评论 -
模板参数,模板分离编译
模板的形参:1.类型形参:template<class T>void h(T a) {//……} 类型形参是指:class T/ typename T中的T,类型形参的名字由用户自己定义,模板的形参(T)表示一个未知的类型。 模板类型形参可以作为类型说明符用在模板中的任何地方,与内置类型/类类型的使用方式完全相同,即可以用于指定返回类型,声明变量等地方 不能...原创 2018-08-08 17:17:16 · 228 阅读 · 0 评论 -
const成员函数及其权限
const成员函数:在成员函数后加const,const修饰this指针指向的对象,这也就保证调用这个const成员函数的对象在内部不会被改变 首先我们要搞懂const放在不同的位置,它修饰的是谁int main(){ char* a = "hello"; char* b = "bit"; const char* p1 = a; char const *p2 = a; char*...原创 2018-05-25 18:57:41 · 4238 阅读 · 1 评论 -
类和对象(四)——默认成员函数(2)
运算符重载特征:1.函数名:operator+合法的运算符(eg:重载<,函数名:operator<)2.运算符重载以后不改变运算符的优先级,结合性,操作数的个数注:五个不能重载的运算符: 1. ?: 2. :: 3.sizeof 4. .* 5. .一、赋值运算符重载1.定义:赋值运算符的重载是对一个已存在的对象,进行(拷贝)赋值而拷贝构造函数,是创建一个新的对象,并...原创 2018-05-25 17:33:49 · 322 阅读 · 0 评论 -
函数——缺省参数
什么是缺省参数?缺省参数就是在函数声明或定义的时候为函数的参数指定一个默认值,在函数调用时,如果没有指定实参则采用该默认函数,否则使用指定的函数。c语言不支持给函数指定默认值,c++而支持缺省参数的类型1.全缺省给函数的所有参数指定默认值void FunTest(int a = 0,int b = 0, int c = 0){ printf("%d",a); printf("%d...原创 2018-05-08 12:32:00 · 937 阅读 · 0 评论 -
深浅拷贝
浅拷贝如图所示,定义的俩个变量同时指向同一块空间,这样析构时就会出错浅拷贝的实现:class String{public: String(char* str =" ")//构造 :_str(str) { cout << "String()" << endl; } String(const String& s)//浅拷贝 { cout << "浅拷贝" << e原创 2017-11-10 11:42:43 · 195 阅读 · 0 评论 -
智能指针(一)之引入
在c++中动态开辟的内存需要我们自己去维护,每次动态开辟内存,都要手动去释放。但是在释放动态开辟的内存时稍不留神就会出现一些问题(比如:1.在程序某个分支,忘记释放内存。2.程序出现抛异常(在delete之前return)),这样会引起内存泄漏。所以我们引入智能指针。智能指针:所谓智能指针就是智能/自动化的管理指针所指向的动态资源的释放。(利用RAII机制)RAII: 1. 定义一个类来原创 2017-08-09 21:14:11 · 237 阅读 · 0 评论 -
智能指针(二)之auto_ptr
智能指针通过对象管理指针,在构造对象时完成资源的分配及初始化,在析构对象时完成资源的清理及汕尾工作。因此,可以得到一份简洁版的智能指针代码:templateclass AutoPtr{public: //构造函数,完成资源的初始化与分配 AutoPtr(T* ptr = NULL) :_ptr(ptr) {} //析构函数,完成资源的清理及汕尾工作 ~AutoPtr()原创 2017-11-10 15:22:22 · 224 阅读 · 0 评论 -
智能指针(三)之scoped_ptr
1.智能指针采用RAII机制,通过对象来管理指针,构造对象时,完成资源的初始化;析构对象时,对资源进行清理及汕尾.2.为什么要引入scoped_ptrauto_ptr,通过转移管理权来完成对象的拷贝与赋值,然而在实际开发中并不实用。所以后来引入了scoped_ptr3.scoped_ptr是什么:scoped_ptr与auto_ptr类似,但最大的区别就是它不能转让原创 2017-11-10 15:40:20 · 234 阅读 · 0 评论 -
类和对象1-this指针
1.类只是一个模型一样的东西,定义一个类并没有为它分配实际的空间。2.对象是类的实例化,实例化出的对象占有实际的物理空间。类对象的存储模型原创 2017-10-25 13:22:56 · 257 阅读 · 0 评论 -
类和对象2-默认成员函数(构造析构)
类有六个成员函数:1.构造函数 2.拷贝构造 3.析构函数 4.赋值操作符重载 5.取地址操作符重载原创 2017-10-25 14:31:15 · 273 阅读 · 0 评论 -
智能指针(四)之shared_ptr
智能指针是采用RAII机制,在构造对象时进行资源的初始化,析构对象时进行资源的清理及汕尾工作1.auto_ptr 2scoped_ptr3shared_ptr原创 2017-11-12 12:15:43 · 165 阅读 · 0 评论 -
智能指针(五)之weak_ptr
shared_ptr通过"引用计数"的方法,来完成对象的拷贝和赋值。但是也会有一种情况会使shared_ptr构成死锁所以引入了weak_ptr,weak_ptr的构造和析构不会引起引用计数的增加或减少。templatestruct ListNode{ T _value; std::shared_ptr _prev; std::shared_ptr _next;转载 2017-11-12 12:31:46 · 297 阅读 · 0 评论 -
C++函数重载,名字间空域
一、什么是函数重载呢?比如我们要实现一个swap函数 int swap(int* x, int* y){ int tmp = *x; *x = *y; *y = tmp;}但是这个函数只能实现俩个整形的交换,我们想要实现俩个char类型的交换,就要使用下面这个函数 void Swap(char* x ,char* y);...原创 2018-04-27 23:18:53 · 188 阅读 · 0 评论 -
引用的概念和使用方法
一、引用的概念引用不是定义一个变量,而是给一个已有成员起一个别名类型 &引用变量名 = 以定义的变量名int a = 10;int &b = a;引用 的特点1.一个变量可以有多个成员2.引用必须初始化3.引用只能在初始化的时候引用一次,不能改变在引用其他的变量 二、const 引用1.const引用 可以为 非const变量 的别名...原创 2018-05-21 00:40:01 · 9079 阅读 · 0 评论 -
引用和指针的区别
引用和指针的区别1.引用:一个变量的别名(不开空间) 指针:一个存放地址的变量(开了空间)2.引用:使用时必须初始化 指针:使用时可以不初始化3.引用:初始化以后不能改变其值 指针:初始化以后可以再次赋值4. 引用:不能为空引用; 指针:可以为空(NULL)5.引用:++,--改变的时其值的大小(变量) 指针:++,-- 改变的是类型的大小6.引用:sizeof 为引用内容的总大小...原创 2018-05-21 00:53:42 · 123 阅读 · 0 评论 -
模板的偏特化,全特化
c++中的模板分为类模板和函数模板模板的特化分为俩种:全特化和偏特化全特化:举一个简单的例子template<class T>class AA{public: AA() :_a(0) {} ~AA() { cout << "原始模板" << endl; }protected: T _a;};template&l...原创 2018-08-08 18:12:33 · 358 阅读 · 0 评论