![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 75
爱的lama
这个作者很懒,什么都没留下…
展开
-
C++中类和对象(2):友元和静态成员
存在的意义:当把类的成员的访问权限定义为private或者protected时,在类外只能通过公有函数成员访问,有时候频繁调用函数成员,必然降低程序运行效率。友元的作用:友元的作用是提高程序的运行效率,它可以直接访问类的私有和保护成员,但也因此破坏了类的封装性,应谨慎使用。表现形式:友元可以是一个函数,也可以是一个类。前者是友元函数,后者是友元类。2.1 友元函数:定义...原创 2018-05-08 12:27:40 · 200 阅读 · 0 评论 -
9.2 动态分配
使用new 运算符初始化为内置的标量类型(int、double等)分配存储空间并初始化,可在后面加上初始值,用括号括起来。int *pi=new int(6); *pi = 6Class_Name *Class_ptr= new Class_Name(value);//需要有相应的构造函数 若初始化常规结构或数组,需要大括号的列表初始化(C++11)struct where {...原创 2019-03-01 20:33:52 · 119 阅读 · 0 评论 -
运算符重载
重载的运算符(有些例外情况)不必是成员函数,但必须至少有一个操作数是用户定义的类型。C++对用户定义的运算符重载的限制:重载后的运算符必须至少有一个操作数是用户定义的类型,这将防止用户为标准类型重载运算符。使用运算符不能违反运算符原来的句法规则。即加法运算不能只有一个操作数等。同样不能改变运算符的优先级。不能创建新运算符不能重载以下运算符. : 成员运算符.* : 成...原创 2019-03-08 14:38:56 · 175 阅读 · 0 评论 -
继承(多态和虚析构函数)
派生类不能直接访问基类的私有成员,必须通过基类方法进行访问。创建派生类对象时,首先创建基类对象。也就是说基类对象在程序进入派生类构造函数之前被创建。C++使用成员初始化列表来完成。派生类构造函数初始化基类私有成员,采用成员初始化列表。Class_name::Class_name(int a,int b, int c):Base_class(a,b) { }派生类构造函数要点:首先创...原创 2019-03-03 21:12:24 · 459 阅读 · 0 评论 -
静态联编和动态联编
联编: 将源代码中的函数调用解释为执行特定代码块称为函数名联编。静态联编: 在编译过程中进行联编。动态联编: 编译器生成能在程序运行期间选择正确的虚方法的代码,称为动态联编。因为只有在运行期间,才知道函数选那种类型的对象。将派生类引用或指针转换为基类引用或指针成为向上强制转换,派生类继承了基类对象的所有数据成员和成员函数,所以可以对基类对象的所有操作都适用于派生类对象。使用虚函数的成本...原创 2019-03-03 21:51:53 · 187 阅读 · 0 评论 -
类继承 总结
protected继承:关键字protected 与private相似,在类外只能用公有成员函数来访问类成员。派生类的成员可以直接访问基类的保护乘员,但不能直接访问基类的私有成员。抽象基类C++使用纯虚函数提供未实现的函数。春旭函数的结尾处为=0类声明中包含纯虚函数,则不能创建该类的对象。从抽象基类派生出的类的具体特征。类设计回顾编译器生成的成员函数默认构造函数要么没有参数,要么...原创 2019-03-03 22:35:44 · 140 阅读 · 0 评论 -
C++ Primer------------------------顺序容器
容器:一些特定类型对象的集合顺序容器:为程序员提供控制元素存储方式和一定顺序访问元素的能力。标准容器如下(标准库):快速顺序访问元素的能力 - vector :可变大小数组 连续空间存储,所以在两端添删元素快速,中间添删很慢。 - deque:双端队列 连续空间存储,所以在两端添删元素快速,中间添删很慢。 - forward_list :单向链表 非连续空间存储,但只能在尾部...原创 2019-05-26 10:10:42 · 109 阅读 · 0 评论 -
C++ 容器适配器
http://c.biancheng.net/stl/container_adapters/该网站条理清晰原创 2019-05-26 18:53:24 · 108 阅读 · 0 评论 -
C++ Primer-------string
前提:阅读C++ Primer 第五版笔记string类型表示可变长的字符序列。头文件:<string>命名空间:std::string定义和初始化string对象string s1; //默认初始化,直接构造,s1是空字符串string s2=s1; //s2是s1的副本,调用拷贝构造函数string s2(s1); //直接构造st...原创 2019-05-22 20:42:35 · 133 阅读 · 0 评论 -
C++ Primer-------vector
vector是标准库类型,表示对象的集合,其中所有对象的类型都相同。集合中每个对象都有一个索引,用于访问对象。头文件:<vector>命名空间:std::vectorvector是一个类模板,模板本身不是类或函数,可以看作编译器生成类或函数的一份说明。编译器根据模板创建类或函数过程叫做实例化。1. vector实例化vector<int> vec; //保存...原创 2019-05-23 09:26:43 · 189 阅读 · 0 评论 -
C++ Primer-----------------迭代器Iterator
所有标准库容器都可以使用迭代器,但是只有少数几种才支持下标运算符,所以对于容器,尽量不使用下标运算符有迭代器的容器都拥有返回一个迭代器的成员,比如begin和end,begin成员会返回一个迭代器,指向第一个元素。end成员返回一个迭代器,指向尾元素的下一个位置,并无实际意义,如果容器为空,则begin和end返回同一个迭代器。都是尾迭代器。迭代器运算符*iter 返回迭代器iter...原创 2019-05-23 10:30:22 · 128 阅读 · 0 评论 -
C++11---新特性1---nullptr---列表初始化---constexpr---using---auto---decltype
1. nullptr作用:表示空指针,用于指针初始化。引入nullptr原因:由于之前表示空指针,使用宏NULL或0来表示。但是再c和c++中定义如下:#ifndef NULL #ifdef __cplusplus #define NULL 0 #else /* __cplusplus */ #define NULL ...原创 2019-06-04 22:23:45 · 304 阅读 · 0 评论 -
9 内存模型
头文件: 头文件通常包含以下内容:函数原型使用#define 或const定义的符号常量结构声明类声明模板声明内联函数存储连续性、作用域和链接性存储连续性(C++有三种(C++11有四种)方案存储数据)自动存储持续性:有两种变量是自动存储连续性:自动变量、寄存器变量在函数定义中声明的变量(包括形参)的存储连续性为自动的。默认情况下,作用域为局部,没有链接性。位置: 自动...原创 2019-03-01 20:12:54 · 101 阅读 · 0 评论 -
指针与对象小结
如何创建对象指针使用常规表示法来声明指向对象的指针。BadString *S ;将指针初始化为指向已有的对象BadString s1("liming", 13);BadString *S = &s1;使用new 来初始化指针,这将创建一个新的对象BadString s1("liming", 13);BadString *s4 = new BadString...原创 2019-03-01 18:39:37 · 107 阅读 · 0 评论 -
类和对象
1.1 类的定义class <类名>{ <<private:>> <成员表1>; <<public:>> <成员表>; <<protected:>> <成员表>;原创 2018-09-26 19:40:46 · 113 阅读 · 0 评论 -
2. 友元和静态成员
存在的意义:当把类的成员的访问权限定义为private或者protected时,在类外只能通过公有函数成员访问,有时候频繁调用函数成员,必然降低程序运行效率。友元的作用:友元的作用是提高程序的运行效率,它可以直接访问类的私有和保护成员,但也因此破坏了类的封装性,应谨慎使用。表现形式:友元可以是一个函数,也可以是一个类。前者是友元函数,后者是友元类。2.1 友元函数:定义:在定义一个类...原创 2018-09-26 19:44:37 · 221 阅读 · 0 评论 -
3. const对象和成员函数
使用关键字const来说明对象,这样的对象成为常对象,它的数据成员值在整个生存周期不能改变,所以常对象必须进行初始化,而且不能更新。格式如下:const <类名> <对象名>(<初值>)常对象只能调用常成员函数。常成员函数格式如下:<类型说明符> <函数名>(<参数表>) const;其中,关键字const加在参...原创 2018-09-26 19:46:55 · 151 阅读 · 0 评论 -
4. 运算符重载
运算符重载是面向对象程序设计的多态性表现之一。作用:当我们需要两个复数相加时,我们想要和整数一样直接相加就可以,但是标准中不支持复数相加,所以此时我们需要运算符重载。格式:&lt;type&gt; operator @ (&lt;Arg&gt;){ ...//函数体}其中,typr为函数返回值的类型,@为要重载的运算符,,Arg为函数的形参表operator为关键字,它与其后...原创 2018-09-26 19:47:59 · 237 阅读 · 0 评论 -
5. 继承与派生
通过继承已有类的部分或者全部成员,创建新类的过程称为派生,继承是面向对象程序设计的特点之一。5.1 继承定义:若定义类A时,使用了已有类B的部分或全部成员,则类A继承了类B,成类B为基类或父类,成类A为派生类或子类。一个派生类又可作为另一个类的基类,一个基类也可派生出若干个派生类,这样就构成类树,或类族。从 已有类派生新类时,可对派生类做以下变化:全部或部分继承基类的成员数据或成员函数...原创 2018-09-26 19:50:06 · 121 阅读 · 0 评论 -
构造函数
这节不讲述构造函数的一般用法和概念。1. 构造函数的类型转换功能单参数构造函数的类型转换功能是指,如果类定义中提供了只带一个参数(没有其他参数或其他参数都有默认值)的构造函数,则当一个其他类型的数值或变量x赋值(注意不是初始化)给该类的对象A时,由于类型不一致,系统自动以x为实参调用该类的单参数构造函数,创建一个该类的临时对象,并将临时对象赋给A,实现隐式类型转换。如下://类Money的...原创 2018-09-26 19:58:32 · 830 阅读 · 0 评论 -
虚基类
虚基类意义:假设定义了一个公共基类A。类B和类C都由类A公有派生,类D由类B和类C公有派生。显然D包含类A的两个拷贝,不仅多占用内存,而且还造成多个拷贝的数据不一致。不定义虚基类的效果如下:class A {public: int x; void SetX(int a) { x = a; } A(int a = 0) { x = a; cout << ...原创 2018-09-26 20:03:56 · 14586 阅读 · 0 评论 -
CV-限定符
在C++中的存储说明符有以下几种:auto(在c++中不再是说明符)registerstaticexternthread_local(C++11新增)mutable注意:在C++11之前,可以在变量中定义中声明为自动变量;但是在C++11中auto用于自动类型推断。关键字static被用在作用域为整个文件中的声明时,表示内部链接性;被用于局部声明中,表示局部变量的存储持续性...原创 2019-01-25 16:21:53 · 1207 阅读 · 0 评论 -
C++中的string类全面分析
首先在c++中string是一个类,其头文件为 < string >string在标准空间std。具体资料在官方链接。主要参考官方文档和具体实例。介绍strings are objects that represent of characters.string的定义和初始化1.定义string类可先不初始化,先定义。std::string str1;当string...原创 2019-02-24 15:30:54 · 152 阅读 · 0 评论 -
12.1 复制构造函数和赋值运算符
一、静态类成员特点静态数据成员,永远只创建一个存储空间,所有对象共享,可以用来判断创建了多少个对象的功能。在类的声明时不分配内存静态类成员不是对象的组成部分实例class BadString { char *name; int age; static int number;//表示创建的对象个数};若要实现计数创建对象个数,则构造函数可以为:BadString::Ba...原创 2019-03-01 15:46:32 · 154 阅读 · 0 评论 -
12.4 返回值为对象的说明
概念:当成员函数或独立的函数返回对象时,有三种返回方式。1. 返回指向对象的引用2. 指向对象的const引用3. 返回const对象返回指向对象的引用使用在重载赋值运算符或重载cout一起使用的<<运算符。因为形参对象需要改变,所以不用const 修饰。返回不调用复制构造函数,因为返回的是引用。返回指向const对象的引用使用const引用常见原因是提高效率如图...原创 2019-03-01 18:28:24 · 297 阅读 · 0 评论 -
多位16进制转10进制
当获取一个数据 比如char a[2]={0xea,0x1d}若其中数据表示数值,则如何将其转为10进制呢?根据计算器可算出 十六进制数ea1d值为:59933根据一下方法: unsigned char a[2] = { 0xea,0x1d }; int b= (int)a[0] * 16 * 16 + (int)a[1]; cout << b << end...原创 2019-09-07 12:01:04 · 884 阅读 · 0 评论