类对象作为类成员
摘要:1.类的类成员的类中要有默认构造参数 2.构造顺序 当类对象作为类的成员时,构造顺序是先依次构造类成员的构造,然后再构造自己 3.析构顺序 析构与构造相反,先析构自己,再以相反顺序依次析构成员 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #
阅读全文
类的初始化列表
摘要:利用初始化列表来初始化数据 构造函数后面 + : 属性1(参数1), 属性2(参数2),…… class Test { public: /* Test(int a, int b, int c) { m_A = a; m_B = b; m_C = c; }*/ Test(int a, int b, i
阅读全文
深拷贝和浅拷贝
摘要:浅拷贝 同一类型的对象之间可以赋值,使得两个对象的成员变量的值相同,两个对象仍然是独立的两个对象,这种情况被称为浅拷贝. 一般情况下,浅拷贝没有任何副作用,但是当类中有指针,并且指针指向动态分配的内存空间,析构函数做了动态内存释放的处理,会导致内存问题。 浅拷贝引发的问题 深拷贝 当类中有指针,并且
阅读全文
构造函数调用规则
摘要:系统默认给一个类提供3个函数 默认构造、拷贝构造、析构函数 1.当我们有了有参构造函数,那么系统就不会再提供默认构造函数了 没有有参构造函数时: 2.但是 系统还会提供默认拷贝构造函数,即使没有定义拷贝构造,也可以直接调用,进行简单的值拷贝 3.当我们提供了拷贝构造,那么系统就不会提供其它构造了,如
阅读全文
Release优化
摘要:debug和release调试结果不同是因为release下会将代码再次优化 void test02() { Person p; p.age = 10; doWork(p); } Person doWork2() { Person p1; return p1; //复制一个新的数据返回 } void
阅读全文
构造和析构
摘要:class Person { Person() //构造 { } //可以重载和有参 ~Person() //析构 { } } 构造函数 与类名相同,不用写void 分类 参数分类:无参构造函数 有参构造函数 类型分类:普通构造函数 拷贝构造函数 #include <iostream> using
阅读全文
const修饰的成员函数
摘要:#include <iostream> using namespace std; class Cube { public: void SetL(int l) { m_L = l; } int GetL() const //只有用const修饰的方法,compareCube才能用const做形参 {
阅读全文
class和struct权限
摘要:class 成员默认权限是private struct 成员默认权限是public
阅读全文
封装加强
摘要:C语言封装 属性和行为分开处理了,类型检测不够 typedef struct _Person{ char name[64]; int age; }Person; typedef struct _Aninal{ char name[64]; int age; int type; //动物种类 }Ain
阅读全文
函数重载实现原理
摘要:编辑器为了实现重载函数,用不同类型来修饰不同的函数名,比如 void func(); 编辑器会修饰成_func 碰到void func(int x),编辑器会修饰成_func_int 碰到void func(int x , char c),可能就会修饰成_func_int_char
阅读全文
函数重载
摘要:1.相同的作用域 2.有默认参数时,要注意避免二义性问题 void func(int a, int b = 20) { } void func(int a ) { } void test() { func(20); //error 不知道调用哪个 }
阅读全文
占位参数和默认参数
摘要:函数占位参数 占位参数只有参数类型声明,⽽而没有参数名声明 一般情况下,在函数体内部⽆无法使⽤用占位参数, 只有重载的时候才有用 占位参数可以有默认值 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; /
阅读全文
内联函数
摘要:早期作用是用来代替宏 宏函数的缺陷 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; //缺陷1:没有类型 //#define MyAdd(x,y) x+y //解决方法:加括号 #define MyAd
阅读全文
int *const p,const int *p和int const *p的区别
摘要:原文地址:https://blog.csdn.net/u013412497/article/details/24495271 在学习c语言的过程中,可能我们很少见到int int *const p,const int *p和int const *p,但当我们在学习c++的过程中,就会遇到这些模糊不清
阅读全文
C++对C语言的拓展
摘要:引用 变量名 变量名实质上是一段连续存储空间的别名,是一个标号(门牌号) 通过变量来申请并命名内存空间. 通过变量的名字可以使用存储空间. 引用的概念 变量名,本身是一段内存的引用,即别名(alias). 引用可以看作一个已定义变量的别名。 引用的语法:Type&
阅读全文
C++对C的增强
摘要:命名空间 实用性增强 C语⾔言中的变量都必须在作⽤用域开始的位置定义!! C++中更强调语⾔言的“实⽤用性”,所有的变量都可以在需要使⽤用时再定义。 using namespace std; int main(void) { int i = 0; cout << "i = " << i << end
阅读全文
BSS段
摘要:C/C++对于定义的没赋值的变量开辟的空间在BSS段,BSS段的数据全部为0 赋值的变量的数据被定义在data的数据段内
阅读全文
二义性
摘要:#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; namespace LOL { int swkId = 1; } void test01() { int swkId = 2; using LOL::sw
阅读全文
c++基础
摘要:::作用域运算符 ::双冒号为全局运算符 #include <iostream> using namespace std; int atk = 200; void Test() { int atk = 100; cout << "Test内部:" << atk << endl; cout << "T
阅读全文