C++
吃龙虾一样能吃饱
这个作者很懒,什么都没留下…
展开
-
C++ int类型数据除法向上取整
整数:int a,b;向下取整:a/b;向上取整:(a-1)/b + 1;原创 2021-04-04 15:47:26 · 8396 阅读 · 3 评论 -
C++ 基类和派生类的构造函数
派生类不能继承基类的构造函数;派生类执行构造函数时,会调用基类的构造函数,一般来说,需要在派生类构造函数中指明基类构造函数,且必须在函数头指明,例如:#include<iostream>using namespace std;//基类Peopleclass People{protected: char *m_name; int m_age;public: People(char*, int);};People::People(char *name,.原创 2021-04-01 21:16:48 · 793 阅读 · 0 评论 -
C++ 指针或引用作为函数参数
C++ 指针或引用作为函数参数例子:#include <iostream>using namespace std;void swap1(int a, int b);void swap2(int *p1, int *p2);void swap3(int &r1, int &r2);int main() { int num1, num2; cout << "Input two integers: "; cin >>转载 2021-03-31 20:20:44 · 311 阅读 · 0 评论 -
字符串数组的打印
普通数组的打印: int vec[]={1,2,3,4,5,6,7,8}; int *ip=vec;//注意,vec是常量指针,不能进行++操作 ip+=5; cout<<sizeof(vec)<<endl;//32 8*4 cout<<vec<<endl; // 0x7ffcf1535db0 指针地址 ...原创 2020-04-09 01:19:46 · 4461 阅读 · 0 评论 -
C++ 类的访问控制和继承 及三种继承方式的理解
1. 类中的访问说明符class Parent{public: ...private: ...protected: ...};访问说明符publicprivateprotected类外用户√××类内成员√√√派生类成员√×√友元√√√2. 派生类的继承方式说明符class Child : public P...原创 2020-04-09 00:53:20 · 764 阅读 · 0 评论 -
C++ 运算符优先级
C++ 运算符优先级转载 2020-04-08 16:02:26 · 119 阅读 · 0 评论 -
C++ 面向对象程序设计OOP【学习笔记】
1. 概述OOP核心思想:数据抽象、继承、动态绑定C++核心思想:封装、继承、多态(与OOP一一对应)2. 定义基类和派生类基类通过在成员函数声明前加上virtual关键字使得该函数执行动态绑定,派生类需要对这些基类的成员函数重新定义以覆盖其旧定义,方法是在该函数的参数列表后面、或const关键字后面加上override关键字。 ——《C++ Primer》...原创 2020-04-07 17:25:56 · 213 阅读 · 0 评论 -
C++ 右值引用和对象移动
1. 左值和右值左值:能对表达式取地址,例如(有名字的)变量、类对象等;右值:不能对表达式取地址,例如非引用的函数返回值、表达式计算的临时变量、字面常量等;一个左值表达式表达的是对象的身份,一个右值表达式表达的是对象的值,左值可以当做右值使用,但右值不能当做左值使用。——《C++ Primer》2. 左值引用和右值引用声明:左值引用: &右值引用:&&a...原创 2020-04-06 22:26:54 · 177 阅读 · 0 评论 -
C++ 理解右值引用、移动语义和完美转发【转载】
[c++11]我理解的右值引用、移动语义和完美转发转载 2020-04-06 14:29:07 · 137 阅读 · 0 评论 -
C++ 用sizeof求struct的大小
原文链接:https://blog.csdn.net/RadianceBlau/article/details/60867307原则每个结构体成员的起始地址为该成员大小的整数倍,即int型成员的起始地址只能为0、4、8,short类型成员起始地址只能为0,2,4…结构体的大小为其中最大成员大小的整数倍struct A{ char a; int b; short c;};s...转载 2020-04-05 22:40:19 · 245 阅读 · 0 评论 -
C++ 智能指针【学习笔记】
头文件memoryshared_ptr类允许多个指针指向同一个对象;创建和初始化shared_ptr<string> p1;shared_ptr<int> p2 = make_shared<int>(42);shared_ptr<string> p3 = make_shared<string>(10,'9');sha...原创 2020-04-05 14:39:31 · 93 阅读 · 0 评论 -
C++ 中的四种cast类型转换
const_cast用于将const变量转为非conststatic_cast用于各种隐式转换,比如非const转const,void*转指针等, static_cast能用于多态向上转化,如果向下转能成功但是不安全,结果未知;dynamic_cast用于动态类型转换。只能用于含有虚函数的类,用于类层次间的向上和向下转化。只能转指针或引用。向下转化时,如果是非法的对于指针返回NULL,对...原创 2020-04-04 22:43:59 · 162 阅读 · 0 评论 -
C++ static关键字的作用总结
全局静态变量定义:在全局变量前加上关键字static,全局变量就定义成一个全局静态变量.存储:静态存储区,在整个程序运行期间一直存在。初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化);作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。局部静态变量定义:在局部变量之前加上关键字st...原创 2020-04-03 22:12:09 · 80 阅读 · 0 评论 -
C++ 拷贝控制 【学习笔记】
类的5种特殊成员函数拷贝构造函数拷贝赋值运算符移动构造函数移动赋值运算符析构函数1. 拷贝、赋值和销毁拷贝构造函数Sales_data::Sales_data(const Sales_data &orig): bookNo(orig.bookNo), units_sold(orig.units_sold), revenue(orig.revenue) {}...原创 2020-04-03 00:22:42 · 141 阅读 · 0 评论 -
C++类 const成员变量和const成员函数
深入理解为什么要有const成员函数1. 首先复习一下指针和const一个指向常量的指针(底层const)不能改变所指对象的值;因此将一个普通指针(不是指向常量的指针)指向一个常量是错误的,因为只能使用指向常量的指针来存放常量的地址:const double pi = 3.14;double *ptr = &pi //错误,ptr是一个普通指针,不能存放常量对象的地址但...原创 2020-04-03 00:04:29 · 615 阅读 · 1 评论 -
C++数组 strlen()和sizeof()的区别
sizeof()返回的是数组的大小,包含空字符char a1[]={'C','+','+'};//无空字符char a2[]={'C','+','+','\0'};//显式添加空字符char a3[]="C++"; //隐式添加了空字符cout<<sizeof(a1)<<endl;//3cout<<sizeof(a2)<<endl;//4...原创 2020-04-02 22:25:43 · 224 阅读 · 0 评论 -
C++ 动态内存【学习笔记】
内存分布静态内存:局部static对象、类static数据成员、定义在任何函数之外的变量;使用之前分配内存,程序结束时销毁;栈内存:函数内的非static对象;仅在程序块运行时才存在;堆:存储动态分配对象;...原创 2020-04-02 20:27:23 · 107 阅读 · 0 评论 -
C++ 指针和数组【易错题】
1. 解引用操作检查下面代码的问题:swap( int* p1,int* p2 ){ int *p; *p = *p1; *p1 = *p2; *p2 = *p;}问题:没有初始化指针p,不能对其进行解引用操作。解引用操作仅适用于那些确实指向了某个对象的有效指针 --《C++ Primer》改正:swap( int* p1,int* p2 ){ ...原创 2020-04-01 17:26:00 · 538 阅读 · 0 评论 -
C++ lambda表达式【学习笔记】
C++ lambda表达式lambda表达式组成[捕获列表](参数列表)->返回类型{函数体}参数列表和返回类型可以省略,但捕获列表和函数体必须包含;捕获列表通常为空,返回类型必须使用尾置返回;例:auto f = []{return 42;};捕获列表只用于局部非static变量值捕获:捕获的变量值是在lambda表达式创建时变量的拷贝,而不是调用时的拷贝vo...原创 2020-04-01 14:55:03 · 191 阅读 · 0 评论 -
C++参数传递【易错题】
代码的问题:GetMemory以拷贝的形式传入实参,即将实参str指针的值赋值给了形参p,在函数内部对形参进行的更改,不会影响实参的变化,因此str仍然为NULL;没有释放内存;void GetMemory( char *p ){ p = (char *) malloc( 100 );}void Test( void ) { char *str = NULL; ...原创 2020-04-01 10:07:38 · 144 阅读 · 1 评论 -
C++基本算术类型
C++基本算术类型算术类型Bytebool1char1short2int4long8long long8float4double8long double16原创 2020-03-31 17:58:03 · 184 阅读 · 0 评论 -
cin>>循环结束问题
cin>>循环跳出问题1.循环输入数值cin>>numint num;vector<int> vec;while(cin>>num){ vec.push_back(num);}for(auto a:vec) cout<<a<<" "<<endl;以非空格作为num的开始,以遇到...原创 2020-03-31 11:28:29 · 628 阅读 · 0 评论 -
C++ 顺序容器 【学习笔记】
顺序容器特点对比:容器类型是否可变访问速度插入删除速度相对空间开销vector数组√快速随机访问尾部插入删除很快,其他位置慢小deque双端队列√快速随机访问头尾插入删除很快,其他位置慢小list 双向链表√双向顺序访问任何位置插入删除速度都很快大forward_list 单向链表√单向顺序访问任何位置插入删除速度都很快...原创 2020-03-30 13:37:28 · 122 阅读 · 0 评论 -
C++ 迭代器【学习笔记】
迭代器迭代器类似于指针,但是不是通过取址运算符&获得的,而是通过容器的begin()或end()成员函数返回的。begin()返回指向头元素的迭代器,end()返回指向尾元素下一位置的迭代器;所有标准库容器都可以使用迭代器。使用迭代器遍历容器:#include <string>#include <iostream>#include <vector...原创 2020-03-29 11:13:46 · 527 阅读 · 0 评论 -
C++ 标准库vector 二维数组的创建和打印
C++ 标准库vector 二维数组的创建和打印#include <vector>#include <iostream>using namespace std;int main(){ // 二维数组的建立和初始化 int m=5,n=5; vector<vector<int>> matrix(m); fo...原创 2020-03-29 01:14:55 · 2831 阅读 · 0 评论 -
C++ 标准库string【学习笔记】
C++ 标准库string#include <string>#include <iostream>#include <cctype>using namespace std;int main(){ // 初始化------------------------------------------------------ string ...原创 2020-03-29 01:13:24 · 123 阅读 · 0 评论 -
C++ IO库【学习笔记】
IO库头文件iostreamistream从流读取数据ostream向流写入数据iostream读写流头文件fstreamifstream从文件流读取数据ofstream向文件流写入数据fstream 读写文件流头文件sstreamistringstream从string流读取数据ostringstream向string流写入数据stringstream 读...原创 2020-03-29 01:08:20 · 107 阅读 · 0 评论 -
C++类 【学习笔记】
类类的基本思想:数据抽象和封装const成员函数class Sales_data{ // 数据成员 std::string bookNo; // const成员函数 std::string isbn() const {return bookNo;}};非const对象既可调用非const成员函数,也可以调用const成员函数;而const对象只能调用const成员函数;...原创 2020-03-28 14:52:07 · 156 阅读 · 0 评论 -
Eigen 编译错误 error: static assertion failed: you_performed_an_invalid_transformation_conversion
最近在使用ros中的一个运动学正解函数getGlobalLinkTransform()时碰到了如上问题,官方文档中该函数的返回值是Eigen::Isometry3d,因此定义了对应的数据类型来接受该返回值,但是编译报错,告诉我出现了类型转换的错误, 明明是同一种类型哪来的类型转换?getGlobalLinkTransform() 官方文档:调用:const Eigen::Isometr...原创 2019-11-26 19:21:47 · 2452 阅读 · 0 评论 -
C++ virtual虚函数
1. 为什么要使用虚函数?在C++语言中,基类将类型相关的函数与派生类不做改变直接继承的函数区分对待,对于某些函数,基类希望它的派生类各自定义适合自身的版本,此时基类就将这些函数声明成虚函数。虚函数使用virtual关键字表示,如下面程序中Parent类中的Function2就是虚函数基类中定义的虚函数必须在其派生类中有和其完全相同的函数声明(函数名、参数列表,返回值),使用overrid...原创 2019-11-22 10:18:53 · 177 阅读 · 0 评论 -
c++笔记:内联函数
内联函数为什么要使用?对于一些规模较小、频繁调用的函数,在函数调用的过程中会造成额外的开销(调用函数比直接运行函数中的简单代码要慢),内联函数可以在每个调用点上将函数“内联地”展开,避免函数调用的开销。在使用内联函数后,函数在编译的时候就已经计算完成了。inline内联函数声明:在函数返回类型前加上 inline关键字,可将此函数标志为内联函数inline只是向编译器发出一个请求,...原创 2019-11-14 20:41:37 · 108 阅读 · 0 评论 -
c++ 和python中简洁的条件判断语句
(条件)?(a:b)若条件满足,则为a,不满足,则为b;原创 2019-01-21 15:33:32 · 1331 阅读 · 0 评论 -
c++ using namespace std的作用
c++ using namespace std的作用 1.概念2.C++标识符3.如何使用4.避免冲突转载:http://www.cnblogs.com/autocrat/archive/2010/05/05/1727630.htmlhttps://blog.csdn.net/quyafeng2011/article/details/689217501.概念和<iostream.h&...转载 2019-01-21 15:28:56 · 405 阅读 · 0 评论