文章分类 -  C++

摘要:1. 有趣的问题 下面的程序输出什么?为什么? class Test { int mi; public: Test(int i) { mi = i; } Test() { Test(0); } void print() { printf("mi = %d\n", mi); } }; int main 阅读全文
posted @ 2020-05-14 20:35 WisdomMan 阅读(1) 评论(0) 推荐(0)
摘要:1. 对象的销毁 生活中的对象都是被初始化后才上市的 生活中的对象被销毁前会做一些清理工作 问题:C++中如何清理需要销毁的对象 一般而言,需要销毁的对象都应该清理 解决方案 - 为每个类都提供一个public的free函数 - 对象不再需要时立即调用free函数进行清理 class Test { 阅读全文
posted @ 2020-05-13 19:59 WisdomMan 阅读(1) 评论(0) 推荐(0)
摘要:1. 问题 C++中的类可以定义多个对象,那么对象的构造顺序是怎样的? 2. 对象的构造顺序一 对于局部对象 - 当程序执行流到达对象的定义语句时进行构造 下面程序中的对象构造顺序是什么? int i = 0; Test a1 = i; while( i < 3 ) Test a2 = ++i; i 阅读全文
posted @ 2020-05-12 21:24 WisdomMan 阅读(1) 评论(0) 推荐(0)
摘要:1. 问题 类中是否可以定义const成员变量? - 类中可以定义const成员变量,但如果没有对类中的const成员变量进行初始化,那么用类定义对象的时候编译器会报错 2. 小实验 下面的类定义是否合法? - 如果合法,ci的值是什么,存储在哪里? class Test { private: co 阅读全文
posted @ 2020-05-12 20:26 WisdomMan 阅读(2) 评论(0) 推荐(0)
摘要:1. 特殊的构造函数 两个特殊的构造函数 - 无参构造函数 没有参数的构造函数 - 拷贝构造函数 参数为const class_name&的构造函数 - 无参构造函数 当类中没有定义构造函数(包括拷贝构造函数)时,编译器默认提供一个构造函数,并且其函数体为空 - 拷贝构造函数 当类中没有定义拷贝构造 阅读全文
posted @ 2020-05-11 22:03 WisdomMan 阅读(0) 评论(0) 推荐(0)
摘要:1. 构造函数 带有参数的构造函数 - 构造函数可以根据需要定义参数 - 一个类中可以存在多个重载的构造函数 - 构造函数的重载遵循C++重载的规则 class Test { public: Test(int v) { // use v to initialize member } }; 友情提示 阅读全文
posted @ 2020-05-11 20:26 WisdomMan 阅读(0) 评论(0) 推荐(0)
摘要:1. 问题 对象中成员变量的初始值是多少? 2. 小实验 下面的类定义中成员变量i和j的初始值为多少? class Test { private: int i; int j; public: int getI() {return i;} int getJ() {return j;} } 3. 对象的 阅读全文
posted @ 2020-05-07 20:45 WisdomMan 阅读(0) 评论(0) 推荐(0)
摘要:1. 问题 经过不停的改进,结构体struct变得越来越不像它在C语言中的样子了 2. 类的关键字 struct在C语言中已经有了自己的定义,必须继续兼容 在C++中提供了新的关键字class用于类定义 class和struct的用法是完全相同的 问题:class和struct有什么区别? 在用st 阅读全文
posted @ 2020-04-05 17:58 WisdomMan 阅读(3) 评论(0) 推荐(0)
摘要:1. 类的组合 电脑一般由CPU、内存、硬盘、键盘和主板等部件组成 思考 - 学习电脑组装需要多少时间? - 学习电脑组装是否需要学习显示器、键盘、鼠标、内存、主板等的设计与制造? 2. 类的封装 类通常分为以下两个部分 - 类的实现细节 - 类的使用方式 当使用类时,不需要关心其实现细节 当创建类 阅读全文
posted @ 2020-04-04 14:47 WisdomMan 阅读(3) 评论(0) 推荐(0)
摘要:1. 面向对象基本概念 类之间的基本关系 - 继承 (1) 从已存在类细分出来的类和原类之间具有继承关系(is-a) (2) 继承的类(子类)拥有原类(父类)的所有属性和行为 - 组合 (1) 一些类的存在必须依赖于其它的类,这种关系叫做组合 (2) 组合的类在某一个局部上由其它类组成 类之间的基本 阅读全文
posted @ 2020-04-04 14:14 WisdomMan 阅读(0) 评论(0) 推荐(0)
摘要:1. 你考虑过吗? 日常生活中,我们都习惯对事物进行分类。那么,这种分类的思想是否可以引入程序设计中呢? 2. 面向对象基本概念 面向对象的意义在于 - 将日常生活中习惯的思维方式引入程序设计中 - 将需求中的概念直接映射到解决方案中 - 以模块为中心构建可复用的软件系统 - 提高软件产品的可扩展性 阅读全文
posted @ 2020-03-31 20:35 WisdomMan 阅读(2) 评论(0) 推荐(0)
摘要:1. 关于const的疑问 const什么时候为只读变量?什么时候是常量? const常量的判别准则 - 只有用字面量初始化的const常量才会进入符号表 - 使用其它变量初始化的const常量仍然是只读变量 - 被volatile修饰的const常量不会进入符号表 PS:在编译期间不能直接确定初始 阅读全文
posted @ 2020-03-25 22:24 WisdomMan 阅读(1) 评论(0) 推荐(0)
摘要:1. 强制类型转换 C方式的强制类型转换 - (Type)(Expression) - Type(Expression) typedef void(PF)(int); struct Point { int x; int y; };int v = 0x12345;PF* pf = (PF*)vchar 阅读全文
posted @ 2020-03-24 21:27 WisdomMan 阅读(2) 评论(0) 推荐(0)
摘要:1. 动态内存分配 C++中的动态内存分配 - C++中通过new关键字进行动态内存申请 - C++中的动态内存申请是基于类型进行的 - delete关键字用于内存释放 变量申请 Type* pointer = new Type; // ...... delete pointer 数组申请 Type 阅读全文
posted @ 2020-03-23 22:03 WisdomMan 阅读(2) 评论(0) 推荐(0)
摘要:1. 重载与指针 下面的函数指针将保存哪个函数的地址? int func(int x) { return x; } int func(int a, int b) { return a+b; } int func(const char* s) { strlen(s); } typedef int(*P 阅读全文
posted @ 2020-03-22 21:17 WisdomMan 阅读(2) 评论(0) 推荐(0)
摘要:1. 自然语言中的上下文 你知道下面词汇中“洗”字的含义吗? 结论: 能和“洗”字搭配的词汇有很多 “洗”字和不同的词汇搭配有不同的含义 2. 重载的概念 重载(Overload) - 同一个标识符在不同的上下文有不同的含义 - 如: (1)“洗”和不同的词汇搭配后有不同的含义 洗衣服、洗脸、洗马桶 阅读全文
posted @ 2020-03-22 13:41 WisdomMan 阅读(0) 评论(0) 推荐(0)
摘要:1. 函数参数的默认值 C++中可以在函数声明时为函数提供一个默认值 当函数调用时没有提供参数的值,则使用默认值 int mul(int x = 0); int main() { printf("%d\n", mul()); // mul(0) return 0; } int mul(int x) 阅读全文
posted @ 2020-03-21 21:40 WisdomMan 阅读(0) 评论(0) 推荐(0)
摘要:1. 常量与宏回顾 C++中的const常量可以替代宏常数定义,如: const int A = 3 <==> #define A 3 C++中是否有解决方案可以替代宏代码片段呢? 2. 内联函数 C++中推荐使用内联函数替代宏代码片段 C++中使用inline关键字声明内联函数 inline in 阅读全文
posted @ 2020-03-14 17:22 WisdomMan 阅读(10) 评论(0) 推荐(0)
摘要:1. 引用的意义 引用作为变量别名而存在,因此在一些场合可以代替指针 引用相对指针来说具有更好的可读性和实用性 swap函数的实现对比: void swap(int& a, int& b) { int t = a; a = b; b = t; } void swap(int* pa, int* pb 阅读全文
posted @ 2020-03-12 22:16 WisdomMan 阅读(0) 评论(0) 推荐(0)
摘要:1. 布尔类型 C++中的布尔类型 - C++在C语言的基本类型系统之上增加了bool - C++中bool可取的值只有true和false - 理论上bool只占用一个字节 注意: (1) true代表真值,编译器内部用1表示 (2) false代表非真值,编译器内部用0表示 2. 布尔类型的值 阅读全文
posted @ 2020-03-10 23:09 WisdomMan 阅读(5) 评论(0) 推荐(0)