![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
LGC_LG
在编程的世界里遨游
展开
-
一、c到c++的升级
1.c++中更强调语言的“实用性”,所有变量都可以在需要时再定义#include <stdio.h>int main(int argc, char *argv[]){ int c = 0; printf("Begin...\n"); for(int i=0; i<10; i++)//用到时再定义 { for(int j=0; j<10; j++)原创 2017-01-02 23:56:57 · 606 阅读 · 0 评论 -
第二十五课:类的静态成员变量----------狄泰软件学院
一、成员变量的回顾:1.通过对象名能够访问public成员变量 2.每个对象的成员变量都是专属的 3.成员变量不能在对象之间共享二、新的需求:1.统计程序运行时期某个类的对象数目 2.保证程序的安全性(不能使用全局变量) 3.随时可以获得当前对象的数目三、在c++中可以定义静态成员变量:1.静态成员变量隶属于整个类所有 2.静态成员变量的生命周期不依赖于任何对象 3.可以通过类名类名类名原创 2017-01-30 16:42:46 · 394 阅读 · 0 评论 -
第二十六课:类的静态成员函数----------狄泰软件学院
一、上节课没有随时可以获得当前对象的数目(必须有对象且调用getCount()函数)解决方案一:将count设置为public,用类名来访问,但是安全性不能得到保证,即使没有对象(提供直接修改count的值)打印的值可能也不为0解决方案2:类的静态成员函数 1.静态成员函数是类中的特殊的成员函数 2.静态成员函数隶属于整个类所有 3.可以通过类名直接访问公有的静态成员函数 4.可以通过对象名原创 2017-01-30 16:44:54 · 466 阅读 · 0 评论 -
第二十七课:二阶构造模式----------狄泰软件学院
一、关于构造函数1.类的构造函数用于对象的初始化 2.构造函数与类名相同并且没有返回值 3.构造函数在对象被创建时自动被调用二、几个问题1.如何判断构造函数的执行结果? 2.在构造函数中执行return语句会发生什么? 3.构造函数执行结束意味着对象构造成功?#include <iostream>using namespace std;class Test{ int mi;原创 2017-01-30 16:48:23 · 1479 阅读 · 0 评论 -
第二十八课:友元的尴尬能力----------狄泰软件学院
一、什么是友元1.友元是c++中的一种关系 2.友元关系发生在函数与类之间或者类与类之间 3.友元关系是单项的,不能传递 4.在类中以friend关键字声明友元 5.类的友元可以是其他类或者是具体的函数 6.友元不受类中访问级别的限制 7.友元可以直接访问具体类的所有成员#include <iostream>#include <cmath>using namespace std;c原创 2017-01-30 16:50:22 · 473 阅读 · 0 评论 -
第二十九课:类中的函数重载----------狄泰软件学院
一、类中的成员函数的重载1.构造函数的重载 2.普通成员函数的重载 3.静态成员函数的重载 那么,全局函数、普通成员函数和静态成员函数之间是否可以构成重载?万变不离其宗1.重载函数的本质为多个不同的函数 2.函数名和参数列表是唯一的标识 3.函数重载必须发生在同一作用域中#include <iostream>using namespace std;class Test{ in原创 2017-01-30 16:53:25 · 395 阅读 · 0 评论 -
第三十课:操作符重载的概念----------狄泰软件学院
解决复数相加的问题: 一、定义一个全局的函数,参数为对象的引用,通过函数调用的方法来解决#include<iostream>using namespace std;class Complex{private: int a; int b;public: Complex(int a = 0, int b = 0) { this->a = a;原创 2017-01-30 16:59:09 · 639 阅读 · 0 评论 -
第三十一课:完善的复数类----------狄泰软件学院
一、复数类应该具有的操作运算(+、-、*、/)、比较(==、!=)、赋值(=)、求模 利用操作符重载: 1.统一复数和实数的运算方式 2.统一复数和实数的比较方式Complex.h#ifndef _COMPLEX_H_#define _COMPLEX_H_class Complex{private: double a; double b;public: Co原创 2017-01-30 17:01:05 · 517 阅读 · 0 评论 -
第三十二课:初探c++标准库----------狄泰软件学院
一、重载操作符,将变量或常量左移到一个对象中#include <stdio.h>const char endl = '\n';class Console{public: Console& operator << (int i)//返回引用的可以连续操作 { printf("%d", i); return *this; } Consol原创 2017-01-30 17:02:50 · 1227 阅读 · 0 评论 -
第三十四课:数组操作符的重载----------狄泰软件学院
一、string还可以通过数组访问操作符访问单个字符#include<iostream>#include<sstream>using namespace std;int main(){ string s = "ab13cf34"; int n = 0; for(int i = 0; i < s.length(); i++) { if(isdig原创 2017-02-03 07:34:10 · 470 阅读 · 0 评论 -
第三十五课:函数对象分析----------狄泰软件学院
一、编写一个函数1.函数可以获得斐波那契数列每项的值 2.每次调用返回一个值 3.函数可根据需要重复使用#include<iostream>using namespace std;int fib(){ static int a0 = 0; static int a1 = 1; int ret = a1; a1 = a0 + a1; a0 = ret;原创 2017-02-03 07:55:26 · 757 阅读 · 0 评论 -
第三十六课:经典问题解析三----------狄泰软件学院
一、什么时候需要重载赋值操作符,编译器是否提供默认的赋值操作符1.编译器为每个类默认重载了赋值操作符 2.默认的赋值操作符仅完成浅拷贝的工作 3.当需要完成深拷贝时必须重载赋值操作符 4.赋值操作符与拷贝构造函数存在相同的意义include using namespace std; class Test { private: int *m_poiter; public: Test() { m_原创 2017-02-03 11:37:17 · 535 阅读 · 0 评论 -
第三十七课:智能指针分析----------狄泰软件学院
一、内存泄漏(臭名昭著的bug)1.动态内存申请堆空间,用完后不规划还 2.c++语言没有垃圾回收的机制 3.指针无法控制所指向堆空间的生命周期#include<iostream>#include<string>using namespace std;class Test{private: int i;public: Test(int i)原创 2017-02-03 14:37:07 · 427 阅读 · 0 评论 -
第三十三课:c++中的字符串类----------狄泰软件学院
一、字符串类c++语言直接支持C语言的所有概念 c++语言没有原生的字符串类c++标准库直接提供了string类型 1.string直接支持字符串连接 2.string直接支持字符串大小比较 3.string直接支持子串查找和提取 4.string直接支持字符串的插入和替换#include <iostream>#include <string>using namespace std;vo原创 2017-02-03 14:42:13 · 516 阅读 · 0 评论 -
第三十八课:逻辑操作符的陷阱----------狄泰软件学院
一、逻辑运算符的原生语义1.操作符只有两种值(true和false) 2.逻辑表达式不用完全计算就能确定最终值 3.最终结果只能是true或者false#include<iostream>using namespace std;int fun(int i){ cout<<"int fun(int i): i="<<i<<endl; return i;}int main(原创 2017-02-03 21:17:50 · 464 阅读 · 0 评论 -
第二十四课:经典问题解析二----------狄泰软件学院
一、构造函数与析构函数的调用顺序(1)、单个对象创建时构造函数的调用顺序1.调用父类的构造过程 2.调用成员变量的构造函数(调用顺序与声明顺序相同) 3.调用类自身的构造函数 4.析构函数与对应的构造函数调用相反(先类自身再类成员最后父类)(2)、多个对象析构时析构顺序与构造顺序相反#include <iostream>using namespace std;class Member{原创 2017-01-30 16:40:47 · 382 阅读 · 0 评论 -
第二十三课:神秘的临时对象----------狄泰软件学院
一、直接调用构造函数#include<iostream>using namespace std;class Test{private: int mi;public: Test(int v) { mi = v; } Test() { Test(0);//直接调用构造函数,看起来合情合理,但却是产生了一个临时对象,原创 2017-01-30 16:37:36 · 567 阅读 · 0 评论 -
第二十二课:对象的销毁----------狄泰软件学院
一、对象不再需要的时候如何销毁?解决方案一:为每个类提供一个public的free函数 对象不再需要时立即调用free函数进行清理(如之前的数组类) 但是很有可能忘了调用,最终导致内存泄漏解决方案二:析构函数: 析构函数没有参数也没有返回值类型声明(故析构函数不能被重载) 析构函数在对象销毁时被自动调用#include <iostream>using namespace std;clas原创 2017-01-30 16:34:13 · 514 阅读 · 0 评论 -
二、c++中的引用
1.变量名回顾:(1).变量是一段实际连续内存空间的别名 (2).程序中通过变量来申请并命名存储空间 (3).通过变量的名字可以使用内存空间 在c++中新增加了引用的概念 引用可以看做已定义的变量的别名2.引用的例子:int a = 3; int& b =a; //引用时必须马上用其他参数进行初始化,但如果引用作为函数参数时不用初始化,注意两者的类型要一样 b = 5; 结果打印a和b原创 2017-01-03 00:27:08 · 407 阅读 · 0 评论 -
三、函数的升级
一、内联函数宏在c语言里有副作用,c++中用const int = 3;的方法解决 c语言里的宏定义可以定义一个代码片段,看起来像函数却不是函数,c++也有类似的解决方案内联函数:c++中推荐用内联函数代替宏代码片段,c++中用inline关键字声明内联函数 inline int fun(int a, int b) { return a二、内敛函数工作原理:(1).c++编译器可以将原创 2017-01-03 00:36:32 · 498 阅读 · 0 评论 -
四、新的关键字
一、动态类型分配(c中用库函数实现,c++中用关键字)(1).动态内存分配用new关键字 (2).删除用delete关键字#include<stdio.h>int main(){ int *p1 = new int; char *p = new char[10]; *p1 = 5; p[0] = 'a'; printf("%d\n",*p1);原创 2017-01-03 00:42:54 · 379 阅读 · 0 评论 -
五、专题一经典问题解析
问题一、const与引用之间的疑惑先总结: 1.只有字面量初始化的const常量才会进入符号表(如const int a = 1; 1是字面量) 对const常量取引用(相当于取地址)会导致编译器为其分配空间,但空间里的值不会被使用 使用其他变量初始化的const常量仍然是只读变量(如 int a =4; const b = a; 最后b是只读变量) 2.被volatile修原创 2017-01-03 00:51:39 · 377 阅读 · 0 评论 -
六、面向对象的基本概念
一、基本概念类和对象是面向对象中的两个基本的概念类指一类事物,是一个抽象的概念对象指属于某一类的一个实体,是一个具体存在的事物 类是一种模板,可以通过这种模板创建出不同的对象实例 对象实例是模板的一个具体变现形式 一个类可以有很多对象,而一个对象必属于某个类类和类之间是有关系的(如老虎和华南虎)二、类和对象的意义:类用于抽象的描述一类事物所特有的属性和行为 如:原创 2017-01-03 00:55:31 · 395 阅读 · 0 评论 -
七、类中的封装
一、类的组合:(1).如电脑类由键盘类、鼠标类、显示类、cpu类、memory类等类组成 (2).类通常可以分为以下两个部分: a.类的实现细节 b.类的使用方式(用户一般只关心怎么使用,而不会关心内部到底如何实现)二、类的封装(1).当使用类的时候不需要关心其实现细节 (2).当创建一个类时,才需要考虑其内部实现细节 (3).封装的基本概念: a.并不是类的每个属性都是对外公开的 b原创 2017-01-03 01:00:15 · 587 阅读 · 0 评论 -
八、构造与析构函数
一、对象初始化 如何给对象进行初始化: 为每个类都提供一个public的initialize函数,对象创建后立即调用initialize函数进行初始化#include<iostream>using namespace std;class student{private: int i;public: void initialize() { i =原创 2017-01-03 01:13:18 · 451 阅读 · 1 评论 -
九、类的静态成员变量
一、成员变量的回顾通过对象名能够访问public成员变量 每个对象都可以有只属于自己的成员变量 成员变量不能在对象之间共享二、类的静态成员变量和静态成员函数1、静态成员变量属于整个类(注意补水对象而是类)所有,不需要依赖任何对象,不会因为对象的产生或者销毁而被产生和销毁,需要在类外单独分配空间,存储位置为全局数据区 2、静态成员变量的访问方法: 可以通过类名直接访问public静态成员(可以原创 2017-01-03 01:19:48 · 842 阅读 · 0 评论 -
十、操作符重载
一、使用c++标准库 c++标准库并不是c++语言的一部分 c++标准库是由c++语言编写而成的类库和函数的集合 c++标准库定义的类和对象都位于std的命名空间里 c++标准库的头文件都不带.h后缀 c++标准库涵盖了c库的功能 c库中#include<cstdio>using namespace std;int main(){ printf("helloworl原创 2017-01-03 01:24:12 · 400 阅读 · 0 评论 -
第十七课:对象的构造(上)----------狄泰软件学院
一、对象中的成员变量是多少?类也属于自定义类型,故其定义出来的对象也是变量,既然是变量就会在内存中占有一席之地。 1.若定义局部的对象调用公有函数,可得i是随机值(会在栈上) 2.若定义全局的对象调用公有函数,可得i的值为0(会在全局数据区占用存储空间) 3.若定义一个类指针指向一个类的对象,在堆空间上产生一个对象,可得i的值为随机值(记得delete掉)#include<iostream>原创 2017-01-18 09:25:48 · 688 阅读 · 0 评论 -
第十八课:对象的构造(中)----------狄泰软件学院
一、带有参数的构造函数#include <iostream>using namespace std;class Test{public: Test() { printf("Test()\n"); } Test(int v) { printf("Test(int v), v = %d\n", v); }}原创 2017-01-18 10:42:58 · 969 阅读 · 0 评论 -
第十九课:对象的构造(下)----------狄泰软件学院
一:两个特殊的构造函数无参构造函数(没有参数的构造函数) 当类中没有定义构造函数时(注意这里是没有提供构造函数),编译器默认提供一个无参构造函数,并且其函数体为空,若类中定义了则不再提供 拷贝构造函数(参数为const class_name&) 当类中没有定义拷贝构造函数(注意这里是没有提供拷贝构造函数),编译器默认提供一个拷贝构造函数,简单进行成员变量成员变量成员变量值的复制Class T/原创 2017-01-18 11:16:28 · 680 阅读 · 0 评论 -
第二十课:初始化列表----------狄泰软件学院
一、类中是否可以定义const成员?class Test(){private: const int ci;public: getCI { return ci; }};在编译的时候会报错说没有初始化的const成员,那么如何来初始化类中的const成员? 在构造函数中用直接赋值的方法编译时也会出错,因为ci是一个只读成员变量,不能赋值 注注注原创 2017-01-18 13:11:00 · 473 阅读 · 0 评论 -
第二十一课:对象的构造顺序----------狄泰软件学院
一、对于局部对象(当程序执行流执行到对象的定义语句时进行构造)int i = 0;Test a1 = i;//a1第一个被定义,所以第一个被构造while(i < 3) Test a2 = ++i;//第二个被定义,第二个被构造if(i < 4) Test a = a1;else Test a(100);include using namespace std; cla原创 2017-01-30 16:31:46 · 356 阅读 · 0 评论 -
第三十九课:逗号操作符的分析----------狄泰软件学院
一、逗号操作符(,)可以构造逗号表达式1.逗号操作符可以用于将多个子表达式连接为一个表达式 2.逗号表达式的值为最后一个子表达式的值 3.逗号表达式的前N-1个子表达式可以没有返回值 4.逗号表达式按照从左往右的顺序计算每个子表达式的值#include <iostream>#include <string>using namespace std;void func(int i){原创 2017-02-03 22:29:08 · 495 阅读 · 0 评论