
程序设计基础
以互联网各大IT公司面试题目为主题,以各大IT技术为切合点,以解决各种IT问题为奇点,致力于构建程序员生态圈
ToF君
这个作者很懒,什么都没留下…
展开
-
纯虚函数与纯虚类
什么是纯虚函数 纯虚函数的语法 1. 将成员函;数声明为virtual 2. 后面加上=0 3. 该函数没有函数体 例如class CmdHandler{ public: virtual void OnCommand(char * cmdline)=0;};含有纯虚函数的类,称为抽象类(或称纯虚类) 例如,CmdHandler中有一个纯虚函数OnComm原创 2016-08-02 16:02:13 · 5275 阅读 · 0 评论 -
递归思想
递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。 递归结构包括两个部分: 1. 定义递归头。解答:什么时候不调用自身方法。如果没有头,将陷入死循环。 2. 递归体。解答:什么时候需要调用自身方法public class Multiply{ public static void main(Str原创 2016-08-13 22:57:09 · 404 阅读 · 0 评论 -
package包
为什么需要package? 1. 为了解决类之间的重名问题 2. 为了便于管理类:合适的类位于合适的包! package怎么用? 1. 通常是类的第一句非注释性语句。 2. 包名:域名倒着写既可,再加上模块名,并与内部管理类 注意事项: 1. 写项目时都要加包,不要使用默认包 2. com.gao和com.gao.car,这两个包没有包含关系,是两个完全独立的包。只是逻辑原创 2016-08-14 00:21:10 · 402 阅读 · 0 评论 -
接受键盘输入
import java.util.Scanner;public class TestScanner{ public static void main(String[] args){ Scanner s=new Scanner(System.in); String str=s.next();//程序运行到next会阻塞,等待键盘的输入 Syst原创 2016-08-14 13:51:13 · 577 阅读 · 0 评论 -
面向对象和面向过程的本质区别
面向过程:事物比较简单,可以用线性的思维去解决 面向对象:事物比较复杂,使用简单的线性思维也无法解决 共同点:面向过程和面向对象都是解决实际问题的一种思维方式,二者相辅相成,并不是对立的。解决复杂问题,通过面向对象方式便于我们从宏观上把我事物之间复杂的关系、方便我们分析整个系统;具体到微观操作,仍然使用面向过程方式来处理原创 2016-08-14 14:24:21 · 869 阅读 · 0 评论 -
程序执行过程的内存分析
栈:存放局部变量,自动分配连续的空间,后进先出 堆:存放new出来的对象 方法区:存放类的信息(代码),static变量,常量池(字符串常量)等原创 2016-08-14 20:54:47 · 585 阅读 · 0 评论 -
构造器
构造器又称为构造方法:constructor 构造器用于构造该类的实例 格式如下: 【修饰符】类名(形参列表){ //n条语句 } 是一种特殊的方法: 1. 通过new关键字调用!! 2. 构造器虽然有返回值,但是不能定义返回类型(返回值的类型肯定是本类),不能在构造器里调用return 3. 如果我们没有定义构造器,则系统会自动定义一个无参的构造函数。如果已定义则编译器不会原创 2016-08-14 21:41:53 · 501 阅读 · 0 评论 -
重载(overload)
方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。调用时,会根据不同的参数选择对应的方法 两同三不同 1. 同一个类,同一个方法名 2. 不同:参数列表不同(类型,个数,顺序不同) 只有返回值不同不构成方法的重载 只有形参的名称不同,不构成方法的重载 与普通方法一样,构造方法也可以重载原创 2016-08-14 22:10:46 · 424 阅读 · 0 评论 -
static
在类中,用static声明的成员变量为静态变量,或者叫做:类属性,类变量 1. 它为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化 2. 对于该类的所有对象来说,static成员变量只有一份,被该类的所有对象共享!! 3. 可以使用“对象.类属性”来调用。不过,一般都是用“类名.类属性” 4. static变量置于方法区中 用static声明的方法为静态方法原创 2016-08-14 22:32:04 · 390 阅读 · 0 评论 -
this关键字
普通方法中,this总是指向调用该方法的对象。 构造方法中,this总是指向正要初始化的对象。 this不能用于static方法。原创 2016-08-14 22:58:40 · 382 阅读 · 0 评论 -
Java基本数据类型
Java是一种强类型语言,每个变量都必须声明起类型。 数据类型: 1.基本数据类型:byte,short,int,long,float,double,char,boolean a.数值型:整数类型,浮点类型 b.字符型 c.布尔型 2.引用数据类型 a.类 b.接口 c.数组原创 2016-08-10 00:18:11 · 338 阅读 · 0 评论 -
内部类
一般情况,我们把类定义成独立的单元。有些情况下,我们把一个类放在另一个类的内部定义,称为内部类。 内部类的作用 1. 内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的算法类直接访问。 2. 内部类可以直接外部类的私有属性,内部类被当成其外部类的成员。但外部类不能访问内部类的内部属性。 内部类的使用场合: 由于内部类提供了更好的封装特性,并且可以很方便的访问外部类的属性。原创 2016-08-19 00:50:45 · 367 阅读 · 0 评论 -
拷贝构造函数
拷贝构造函数是一种特殊的构造函数,,copy constructor 1. 它是构造函数,所以函数名是类名,没有返回值 2. 它是特殊的构造函数,函数形式是固定的class Object{ public: Object(const Object &other);};拷贝构造函数的含义:以一个对象为蓝本,来构造另一个对象 Object b; Object a(b原创 2016-08-02 16:55:08 · 465 阅读 · 0 评论 -
程序注释
用于注解说明解释程序的文字就是注释提高了代码的阅读性;调试程序的重要方法Java中的注释类型: (1). 单行注释 (2). 多行注释 (3). 文档注释(java特有)注释是一个程序必须要具有的良好编程习惯将自己的思想通过注释先整理出来,再用代码去体现原创 2016-08-05 22:52:39 · 583 阅读 · 0 评论 -
java台球游戏
效果图 /** * 测试窗口物体沿着任意角度飞行。 * /public class GameFrame extends Frame { //GUI编程:AWT,swing等。 Image img = GameUtil.getImage("images/sun.jpg"); /** * 加载窗口 */ public void launchFrame(原创 2016-08-27 22:17:27 · 1926 阅读 · 0 评论 -
Java台球游戏2
效果:测试窗口物体沿着任意角度飞行。 /** * 测试窗口物体沿着任意角度飞行。 * 最后,实现一个小的台球游戏。 * @author Administrator * */public class GameFrame02 extends Frame { Image img = GameUtil.getImage(“images/sun.jpg”);/** * 加载窗口 *原创 2016-08-27 22:23:03 · 1007 阅读 · 0 评论 -
final关键字
修饰变量: -常量 修饰方法: -该方法不可被子类重写。但是可以被重载! 修饰类: -修饰的类不能有子类,不能被继承。比如:Math,String原创 2016-08-17 21:36:14 · 364 阅读 · 0 评论 -
多态
多态性是OOP中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有在执行过程中才被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展性。 Java中如何实现多态?使用多态的好处? 引用变量的两种类型: 编译时类型(模糊一点,一般是一个父类) 由声明时的类型决定 运行时类型(运行时,具体实哪个子类就是那个子类) 由实际对应的对象类型决定。 多态原创 2016-08-17 22:44:20 · 334 阅读 · 0 评论 -
抽象类
为什么需要抽象类?如何定义抽象类? 是一种模版模式。抽象类为所有子类提供了一个通用模版,子类可以在这个模版基础上进行扩展。 通过抽象类,可以避免子类设计的随意性。通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。 要点: 有抽象方法的类只能定以后能抽象类 抽象类不能实例化,及不能用new来实例化抽象类 抽象类可以包含属性、方法、构造方法,但是构造方法不能用来new实例,只原创 2016-08-17 23:27:40 · 435 阅读 · 0 评论 -
接口
为什么需要接口?接口和抽象类的区别? -接口就是比”抽象类“还”抽象“的”抽象类“,可以更加规范的对子类进行约束。全面专业地实现了:规范和具体实现的分离 -接口就是规范,定义的是一组规则,体现了现实世界中”如果你是…则必须能…“的思想。 -接口的本质是契约,就像我们人间的法律一样。制定好后大家都遵守。 -项目的具体需求是多变的。我们必须以不变应万变才能从容开发,此处的”不变“就是”规范“。因原创 2016-08-17 23:42:42 · 348 阅读 · 0 评论 -
Java学前基础知识
软件开发: 软件,即一系列按照特定顺序组织的计算机数据和指令的集合。有系统软件和应用软件之分。 人机交互方式: 1. 图形化界面这种方式简单直观,使用者易于接受,容易上手操作 2. 命令行方式,需要有一个控制台,输入特定的指令,让计算机完成一些操作。较为麻烦,需要记录一些命令。 常用的DOS命令 dir:列出当前目录下的文件以及文件夹 md:创建目录 rd:删除目录 cd:进入原创 2016-08-04 22:52:39 · 751 阅读 · 0 评论 -
面向对象的三大特征
继承 类是对对象的抽象,继承是对某一批类的抽象,从而实现对现实世界更好的建模。 提高代码的复用性! extands的意思是“扩展”,子类是父类的扩展 封装/隐藏 多态 为了适应需求的多种变化,使代码变得更加通用!子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法) Java中类只有单继承,没有像C++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。多继承,原创 2016-08-15 00:07:07 · 387 阅读 · 0 评论 -
方法的重写(override)
在子类中可以根据需要对从基类中继承来的方法进行重写。 重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型 重写方法不能使用比被重写方法更严格的访问权限(由于多态)原创 2016-08-15 00:16:47 · 495 阅读 · 0 评论 -
C++操作符重载
定义操作符重载就是把操作符(比如’+,-,*,/’这些运算符)赋于新的意义。调用方式调用类中的操作符重载函数的方法调用友元或独立的操作符重载函数的方法重载限制并不是所有的操作符都能被重载,除了. ,.* ,:: ,? : ,sizeof,typeid这几个运算符不能被重载,其他运算符都能被重载重载不能改变运算符用于内置类型时的含义,程序员不能改变运算符+用于两个int型时的含义运算符函数原创 2017-06-06 11:48:59 · 463 阅读 · 0 评论 -
VC 6.0问题
问题1:Administrator privileges required for ole remote procedure call debugging :this feature will not work解决办法:用管理员身份运行一下 vc ++6.0 就行了,之后都能进行调试了。还有win7安装VC6.0时最好把OLE选项勾去,要不然就会反复出现这个不兼容的问题!原创 2017-05-22 09:22:20 · 697 阅读 · 0 评论 -
C++中Map的用法
Map简介map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。Map功能自动建立Key - value的对应。key 和 value可以是任意你需要的类型。 根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找原创 2017-05-22 10:31:12 · 723 阅读 · 0 评论 -
VS中Debug模式和Release模式的区别
Debug 和 Release 编译方式的本质区别Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。 Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并原创 2017-05-22 15:07:04 · 1112 阅读 · 0 评论 -
malloc和new的区别
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc原创 2017-06-07 08:56:57 · 446 阅读 · 0 评论 -
如何将CString转换为LPCSTR
使用CString的属性GetBuffer这个函数原创 2017-06-08 16:20:40 · 3451 阅读 · 0 评论 -
C语言文件操作函数大全
fopen(打开文件)相关函数 open,fclose表头文件 #include定义函数 FILE * fopen(const char * path,const char * mode);函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。mode有下列几种形态字符串:r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该原创 2017-07-12 17:36:44 · 563 阅读 · 0 评论 -
动态库和静态库
一.动态链接库特点通常不能直接运行,也不能接收消息。他们是独立的文件其中包含能被可执行程序或其他DLL调用来完成某项工作的函数。只有在其他模块调用动态链接库中的函数时,才发挥作用。Windows API 中所有函数都包含在DLL中。其中有3个最重要哦的DLL,Kernel.dll,它包含用于管理内存、进程和线程的各个函数;User32.dll,它包含用于执行用户界面任务任务(如窗口的创建和...原创 2019-02-08 21:23:43 · 437 阅读 · 0 评论 -
windows窗口拉伸参数WS_THICKFRAME
禁止窗口拉伸将窗口STYLE里WS_THICKFRAME置零//禁止主窗口拉伸 DWORD dwWinStyle = GetWindowLong(GetHWND(), GWL_STYLE); dwWinStyle &= ~WS_THICKFRAME; dwWinStyle |= WS_POPUP; SetWindowLong(GetHWND(), GWL_STYLE, d...原创 2019-04-24 11:02:39 · 5264 阅读 · 0 评论 -
解决已封装好类,调试的提示不是类或命名空间
VS问题: error C2653: “CBinary”: 不是类或命名空间名称1>—— 已启动生成: 项目: XmlParseLJT, 配置: Debug Win32 —— 1> CBinary.cpp 1>e:\ljt\新建文件夹\xmlparseljt\xmlparseljt\cbinary.cpp(4): error C2653: “CBinary”: 不是类或命名空间名称 1>e:原创 2017-06-06 10:55:19 · 7842 阅读 · 6 评论 -
求最大公约数方法
方法一:穷举法从两个数a和b中的较小数开始逐个减小1,寻找能整除a和b的整数。第一个找到的整数即整数a和b的最大公约数。int getPublicMaxNum(int a,int b){ int n = a; int i = n; for(; i >= 1;i--) { if( a % i == 0 && b % i == 0) {原创 2017-06-05 17:54:39 · 1051 阅读 · 0 评论 -
VS2013中如何解决error C4996: 'fopen'问题
控制台应用程序出现如下错误: error C4996: ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.原创 2016-11-16 19:10:13 · 723 阅读 · 0 评论 -
备忘录模式
备忘录对象是一个用来存储另外一个对象内部状态快照的对象。 备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捉住,并外部化,存储起来,从而可以在将来适合的时候把这个对象还原到存储起来的状态。 设计需要回放的软件,记录一下事务的状态。数据库备份,文档的编译,撤销,恢复。 设计备忘录三大步骤: 1、设计记录的节点,存储记录,//记录鼠标,键盘的状态 2、设计记录的存储,vector,li原创 2016-09-08 22:15:45 · 516 阅读 · 0 评论 -
几种排序概念
1. 选择排序:重点是选择最小值的那个步骤,不是用两两置换的方法找出剩余的最小值,而是和第一个值作比较,还有两个相同数值并不需要置换。2. 插入排序:设立哨兵,作为临时存储和判断数组边界之用。3. shell排序:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序4. 堆排序:堆排序是一种树形选择排序,是对直接选原创 2016-05-29 23:48:45 · 659 阅读 · 0 评论 -
C++操作Excel说明
Workbooks wbsMyBooks; _Workbook wbMyBook; Worksheets wssMysheets; _Worksheet wssMysheet; Range range; Range iCell; LPDISPATCH lpDisp; COleVari原创 2017-05-23 16:25:39 · 1027 阅读 · 0 评论 -
const用法
const修饰成员函数const修饰的成员函数不能修改任何的成员变量(mutable修饰的变量除外)const成员函数不能调用非const成员函数,因为非const成员函数可以修改成员变量const修饰函数返回值指针传递如果返回const data,non-const pointer,返回值也必须赋给const data,non-const pointer.因为指针指向的数据是常量不能修改原创 2017-05-13 16:24:50 · 403 阅读 · 0 评论 -
XML使用
XML与HTMLXml 可扩展标记语言,被设计为传输和存储数据,其焦点是数据的内容 HTML 被设计用来显示数据,其焦点是数据的外观 HTML 旨在显示信息,而XML旨在传输信息XML数据结构XML文档形成了一种树结构,它从根部开始,然后扩展到枝叶 XML元素XML元素指的是从(且包括)开始标签(且包括)结束标签的部分 元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性原创 2017-05-15 16:23:40 · 396 阅读 · 0 评论