C++
文章平均质量分 69
加油11
模仿模仿再模仿!
展开
-
C和C++相互调用
1 C++和C相互调用实际工程中C++和C代码相互调用是不可避免的。C++编译器能够兼容C语言的编译方式。C++编译器会优先使用C++编译的方式。extern关键字能够强制让C++编译器进行C方式的编译。extern “C”{ // do C-style compilation here}编程实验:C++调用C函数// add.c#include "原创 2018-01-11 11:19:16 · 205 阅读 · 0 评论 -
二阶构造模式
1 构造函数的回顾关于构造函数: 类的构造函数用于对象的初始化;构造函数与类同名并且没有返回值;构造函数在对象定义时自动被调用。2 问题1.如何判断构造函数的执行结果?(目前无法判断) 2.在构造函数中执行return语句会发生什么?(构造函数直接 返回,执行结束) 3.构造函数执行结束是否意味着对象构造成功?(不)编程实验:异常的构造函数#inclu原创 2018-01-24 21:26:43 · 473 阅读 · 0 评论 -
函数参数的扩展
1 函数参数的默认值C++中可以在函数声明时为参数提供一个默认值。当函数调用时没有提供参数的值,则使用默认值。参数的默认值必须在函数声明中指定,不能在定义中指定。问题:函数定义中是否可以出现参数的默认值?当函数声明和定义中的默认值不同时是否会发生错误?实例分析:默认参数值初探#include int mul(int x = 0);int mai原创 2018-01-08 16:55:23 · 312 阅读 · 0 评论 -
数组操作符的重载
1 问题string类对象还具备C方式字符串的灵活性吗?还能直接访问单个字符串吗?2 字符串类的兼容性string类最大限度地考虑了C字符串的兼容性。可以按照使用C字符串的方式使用string对象。编程实验:用C方式使用string类#include #include using namespace std;int main(){ string原创 2018-02-01 17:43:14 · 469 阅读 · 0 评论 -
神秘的临时对象
1 有趣的问题下面的程序输出什么?为什么?实例分析:有趣的问题#include class Test { int mi;public: Test(int i) { mi = i; } Test() { Test(0); } void print() { printf("mi原创 2018-01-23 11:36:45 · 326 阅读 · 0 评论 -
友元的尴尬能力
1 友元的概念什么是友元?友元是C++中的一种关系;友元关系发生在函数与类之间或者类与类之间;友元关系是单项的,不能传递。 函数是类的友元。2 友元的用法在类中以friend关键字声明友元;类的友元可以是其它类或者具体函数;友元不是类的一部分;友元不受类中访问级别的限制;友元可以直接访问具体类的所有成员。3 友元的语法编程实原创 2018-01-26 11:59:43 · 289 阅读 · 0 评论 -
类中的函数重载
1 函数重载的回顾函数重载的本质为相互独立的不同函数;C++中通过函数名和函数参数确定函数调用;无法直接通过函数名得到重载函数的入口地址;函数重载必然发生在同一个作用域中。2 类中的重载类中的成员函数可以进行重载: 构造函数的重载普通成员函数的重载静态成员函数的重载问题:全局函数,普通成员函数以及静态成员函数之间是否可以构成重载?普通成员函数和静态成员函原创 2018-01-26 17:06:28 · 323 阅读 · 0 评论 -
操作符重载的概念
1 需要解决的问题下面的复数解决方案是否可行?编程实验:复数的加法操作#include class Complex { int a; int b;public: Complex(int a = 0, int b = 0) { this->a = a; this->b = b; } in原创 2018-01-27 17:51:35 · 286 阅读 · 0 评论 -
初始化列表的使用
1 问题类中是否可以定义const成员?小实验下面的类定义是否合法? 如果合法,ci的值是什么,存储在哪里?class Test{private: const int ci;public: int getCI(){return ci;}};// 编译通过但是定义对象时编译出错。编程实验:类中的const成员#include clas原创 2018-01-20 11:15:14 · 330 阅读 · 0 评论 -
完善的复数类
1 完善的复数类利用操作符重载 统一复数与实数的运算方式统一复数与实数的比较方式编程实验:复数类的实现Complex.h#ifndef _COMPLEX_H_#define _COMPLEX_H_class Complex{ double a; double b;public: Complex(double a = 0, do原创 2018-01-28 20:49:34 · 355 阅读 · 0 评论 -
初探C++标准库
1 有趣的重载操作符其意义是将整数1按位左移2位,即:0000 0001 -> 0000 0100重载操作符,将变量或常量左移到一个对象中!编程实验:重载左移操作符#include const char endl = '\n';class Console{public: Console& operator int i) {原创 2018-01-29 16:17:43 · 233 阅读 · 0 评论 -
赋值操作符重载
1 关于赋值的疑问什么时候需要重载赋值操作符?编译器是否提供默认的赋值操作?编译器为每个类默认重载了赋值操作符。默认的赋值操作符仅完成浅拷贝。当需要进行深拷贝时必须重载赋值操作符。赋值操作符与拷贝构造函数有相同的存在意义。编程实验:默认赋值操作符重载#include <iostream>#include <string>using n...原创 2018-02-08 18:07:43 · 766 阅读 · 0 评论 -
对象的构造
1 问题:对象中成员变量的初始值是多少?小实验:下面的类定义中成员变量i和j的初始值是多少?编程实验:成员变量的初始值#include <stdio.h>class Test{private: int i; int j;public: int getI() { return i; } int getJ() { retur...原创 2018-01-16 16:54:22 · 270 阅读 · 0 评论 -
C++种的字符串类
1 历史遗留问题C语言不支持真正意义上的字符串;C语言用字符数组和一组函数实现字符串操作;C语言不支持自定义类型,因此无法获得字符串类型。2 解决方案从C到C++的进化过程引入了自定义类型;在C++中可以通过类完成字符串类型的定义;问题:C++中的原生类型系统是否包含字符串类型? 不。3 标准库中的字符串类C++ 语言直接支持C语言的所有概念;C+...原创 2018-01-31 16:09:25 · 396 阅读 · 0 评论 -
命名空间
1 C++中的命名空间在C语言中只有一个全局作用域C语言中所有的全局标识符共享同一个作用域标识符之间可能发生冲突。C++中提出了命名空间的概念:命名空间将全局作用域分成不同的部分;不同命名空间中的标识符可以同名而不会发生冲突;命名空间可以相互嵌套;全局作用域也叫默认命名空间。注意:不同的命名空间中可以定义相同命名的全局变量和函数,但是调用的时候必须采用 命名空间名字:原创 2018-01-11 16:50:59 · 263 阅读 · 0 评论 -
内联函数分析
1 常量与宏回顾C++ 中const常量可以替代宏常数定义,如: const int A = 3; #define A 3C++中是否有解决方案替代宏代码片段呢?2 内联函数C++中推荐使用内联函数替代宏代码块。C++中使用inline关键字声明内联函数。inline int fun(int a, int b){ return a < b ? a :原创 2018-01-07 17:30:13 · 207 阅读 · 0 评论 -
函数重载分析
1 自然语言中的上下文你知道下面词汇中“洗”的含义吗?洗衣服、洗脑、洗脸、洗车、洗马桶……结论:能和“洗”字搭配的词汇有很多,“洗”字和不同的词汇搭配有不同的含义。2 重载的概念重载(Overload):同一个标识符在不同的上下文有不同的意义。如: “洗”和不同的词汇搭配有不同的含义:洗衣服、洗脑、洗脸、洗车、洗马桶……“play”和不同的单词搭配有不同的含义:pl原创 2018-01-10 11:18:55 · 269 阅读 · 0 评论 -
学习C++的意义
1 常见的观点操作系统和驱动程序都是C写的,学好C足够了。C++在应用层用的比较多,学嵌入式的没必要。我以后就做驱动开发,没精力也没必要学习C++了。Linus大神都认为C++一无是处,还学它干嘛?!2 一些历史UNIX操作系统诞生之初是直接用汇编语言写成的。随着UNIX的发展,汇编语言的开发效率成为一个瓶颈。如何提高UNIX的开发效率?1971年,Ken Thompson 和 D原创 2018-01-02 17:58:27 · 1466 阅读 · 0 评论 -
C++中动态内存分配
1 动态内存分配C++中的动态内存分配 C++中通过new关键字进行动态内存申请。C++中的动态内存申请是基于类型进行的。delete关键字用于内存释放。如:变量申请: Type *pointer = new Type; //…… delete pointer;数组申请: Type *pointer = new Type[N]; //…原创 2018-01-11 16:46:40 · 267 阅读 · 0 评论 -
新型的类型转换
1 C 方式的强制类型转化语法: (Type)(Expression)Type(Expression)如:typedef void(PF)(int);struct Point{ int x; int y;};int v = 0x12345;PF* pf = (PF*)v;char c = char(v);//gcc编译不通过,g++编译通过Poin原创 2018-01-12 11:36:13 · 228 阅读 · 0 评论 -
对象的构造顺序
1 问题C++ 中的类可以定义多个对象,那么对象构造的顺序是怎么样的呢?2 对象的构造顺序对于局部对象 当程序执行流到达对象的定义语句时进行构造。下面程序中的对象构造顺序是什么?实例分析:局部对象的构造顺序#include class Test{private: int mi;public: Test(int i) {原创 2018-01-21 11:04:06 · 473 阅读 · 0 评论 -
C到C++的升级
1 C和C++的关系C++继承了所有的C特性。C++在C的基础上提供了更多的语法和特性。C++的设计目标是运行效率与开发效率的统一。2 C到C++的升级2.1 变量定义C++更强调语言的实用性。所有的变量都可以在需要使用时再定义。2.2 register关键字register关键字请求编译器将局部变量存储于寄存器中。在C++中依然支持register关键字(存在的目的就是为了兼容C语原创 2018-01-03 11:51:22 · 382 阅读 · 0 评论 -
引用
1 变量名回顾变量是一段实际连续存储空间的别名;程序中通过变量来申请并命名存储空间;通过变量的名字可以使用存储空间。问题:一段连续的存储空间只能有一个别名吗?2 引用的基本概念在C++中新增加了引用的概念: 引用可以看作是一个已定义变量的别名;引用的语法:Type& name = var;int a = 4;int& b = a; // b是a的别原创 2018-01-04 12:08:06 · 241 阅读 · 0 评论 -
进阶面向对象
1 你考虑过么?日常生活中,我们都习惯对事物进行分类。那么,这种分类的思想是否可以引入程序设计中呢?2 面向对象的基本概念面向对象的意义在于将日常生活中习惯的思维方式引入程序设计中;将需求中的概念直观的映射到解决方案中;以模块为中心构建可复用的软件系统;提高软件产品的可维护性和可扩展性。类和对象是面向对象中的两个基本概念:类:指的是一类事物,是一个抽原创 2018-01-14 11:20:24 · 199 阅读 · 0 评论 -
类与封装的概念
1 类的组合电脑一般而言是由CPU、内存、主板、键盘和硬盘等部件组合而成。思考 (1)学习电脑组装需要多少时间? (2)学习电脑组装是否需要学习显示器、键盘、鼠标、主板、内存等部件的设计与制造?2 类的封装类通常分为以下两个部分 类的实现细节类的使用方式当使用类时,不需要关心其实现细节;当创建类时,不需要考虑其内部实现细节。例: 普通原创 2018-01-15 11:17:11 · 767 阅读 · 0 评论 -
对象的销毁
1 对象的销毁生活中的对象都是被初始化后才上市的。生活中的对象被销毁前会做一些清理工作。问题:C++ 中如何清理需要销毁的对象?一般而言,需要销毁的对象都应该做清理。解决方案: 为每一个类提供一个public的free函数;对象不再需要时立即调用free函数进行清理。存在的问题: free只是一个普通的函数,必须显示的调用;对象销毁前没有做清理,很可能造成原创 2018-01-22 20:36:46 · 700 阅读 · 0 评论 -
进化后的const分析
1 C语言中的constconst修饰的变量是只读的,本质还是变量。const修饰的局部变量在栈上分配空间。const修饰的全局变量在只读存储区分配空间。const只在编译器有用,在运行期无用。const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边。C语言中的const使得变量具有只读属性。const将具有全局生命周期的变量存储于只读存储区。const原创 2018-01-03 16:49:17 · 269 阅读 · 0 评论 -
类的真正形态
1 类的关键字问题:经过不停的改进,结构体struct变得越来越不像它在C语言中的样子了!struct在C语言中已经有了自己的含义,必须继续兼容。在C++中提供了新的关键字class用于类定义。class和struct的用法是完全相同的。class和struct有什么区别在使用struct定义类时,所有成员的默认访问级别为public。在用class定义类时,所有成员的原创 2018-01-16 11:29:13 · 238 阅读 · 0 评论 -
类的静态成员变量和静态成员函数
1 成员变量的回顾通过对象名能够访问public成员变量。每个对象的成员变量都是专属的。成员变量不能在对象之间共享。2 新的需求统计在程序运行期间某个类的对象数目。保证程序运行的安全性(不能使用全局变量)。随时可以获取当前对象的数目。编程实验:解决方案的尝试#include class Test{private: int mCount原创 2018-01-23 20:42:54 · 957 阅读 · 0 评论 -
函数对象分析
1 客户需求函数可以获得斐波那契数列每项的值。每调用一次返回一个值。函数可根据需要重复使用。编程实验:第一个解决方案#include #include using namespace std;int fib(){ static int a0 = 0; static int a1 = 1; int ret = a1; a1原创 2018-02-05 17:48:41 · 443 阅读 · 0 评论