假设要编写一个小区养狗管理程序,该程序需要一个“主人”类,还需要一个“狗”类.狗是有主人的,主人也有狗.假定狗只有一个主人,但一个主人可以有最多10条狗.该如何处理“主人”类和“狗”类的关系呢?下面是一种直观的写法: #include<iostream> using namespace std; class CDog; class CMaster { CDog dogs[10]; int dog_num; }; class CDog { CMaster m; }; int main() { }…
类的成员函数之间可以互相调用.在成员函数(静态成员函数.构造函数和析构函数除外)中调用其他虚成员函数的语句是多态的.例如: #include<iostream> using namespace std; class CBase { public: void func1() { func2(); } virtual void func2(){cout<<"CBase::func2()"<<endl;} }; class CDerived:public…
“多态”的关键在于通过基类指针或引用调用一个虚函数时,编译时不确定到底调用的是基类还是派生类的函数,运行时才确定.例子: #include<iostream> using namespace std; class A{ public: int i; virtual void func(){}; virtual void func2(){}; //如果为只有一个去掉 virtual 关键字即virtual void func2(){};变为 void func2(){}; 输出结果不变 仍为 8…
游戏软件的开发最能体现面向对象设计方法的优势.游戏中的人物.道具.建筑物.场景等都是很直观的对象,游戏运行的过程就是这些对象相互作用的过程.每个对象都有自己的属性和方法,不同对象也可能有共同的属性和方法,特别适合使用继承.多态等面向对象的机制.下面就以“魔法门”游戏为例来说明多态在增加程序可扩展性方面的作用. “魔法门”游戏中有各种各样的怪物,如骑士.天使.狼.鬼,等等.每个怪物都有生命力.攻击力这两种属性.怪物能够相互攻击.一个怪物攻击另一个怪物时,被攻击者会受伤:同时被攻击者会反击,使得攻击…
在c++中,类和类之间有两种基本关系:复合关系和继承关系. 复合关系也称为“has a”关系或“有”的关系,表现为封闭类,即一个类以另一个类的对象作为成员变量. 继承关系也称为“is a”关系或“是”关系,即派生类对象也是一个基类对象. 在设计两个有关系的类时要注意,并非两个类有共同点,就可以让它们成为继承关系.让类B继承类A,必须满足“类B所代表的事物也是类A所代表的事物”这个命题从逻辑上是成立的.例如:写一个平面上的点类point: class CPoint{ double x,y; };…
1.当用一个对象去初始化同类的另一个对象时,会引发复制构造函数被调用.例如,下面的两条语句都会引发复制构造函数的调用,用以初始化c2. C c2 (c1); C c2=c1; 这两条语句是等价的.注意第二条是初始化语句,不是赋值语句.赋值语句的等号左边是一个早已有定义的变量,赋值语句不会引发复制构造函数的调用.例如: C c1,c2; c1=c2; "c1=c2;"这条语句不会引发复制构造函数的调用,因为c1早已生成,已经初始化过了. 2.如果函数F的参数是类C的对象,那么当F被调用时…
示例1: #include<iostream> using namespace std; class CDemo{ public: ~CDemo(){cout<<"destructor"<<endl;} }; void Func(CDemo obj){ cout<<"func"<<endl; } CDemo d1; CDemo Test(){ cout<<"test"<…
类型转换构造函数:  除复制构造函数外,只有一个参数的构造函数一般可以称作类型转换构造函数,因为这样的构造函数能起到类型自动转换的作用.例如下面的程序: #include<iostream> using namespace std; class Complex{ public: double real,imag; Complex(int i){ cout<<"IntConstructor called"<<endl; real=i;imag=0; }…
背景:   c++是在c语言的基础上发展而来的,第一个c++的编译器实际上是将c++程序翻译成c语言程序,然后再用c语言编译器进行编译.c语言没有类的概念,只有结构,函数都是全局函数,没有成员函数.翻译时,将class翻译成struct.对象翻译成结构变量是显而易见的,但是对类的成员函数应该如何翻译?对“my.modify();”这样通过一个对象调用成员函数的语句,又该如何翻译呢? c语言只有全局函数,因此成员函数只能被翻译成全局函数:“my.modify();”这样的语句也只能翻译成普通的调用…
#include<iostream> using namespace std; class A; class B{ public: void f(A* pt){}; } class A{ public: void f(B *pt){} } 第3行声明了A类,A类的定义在后面,之所以要提前声明,是因为B类的定义中用到了A类型(第6行),而此时A类还没有定义,编译会报错.不要第三行,而把A类的定义写在B类前面,是解决不了这个问题的,因为A类中也用到了B类(第10行),把A类的定义写在前面会导致第1…
  封闭类:  一个类的成员变量如果是另一个类的对象,就称之为“成员对象”.包含成员对象的类叫封闭类. #include<iostream> using namespace std; class A{ int n; public: A(int n):n(n){} }; class B{ A t; int g; public: B(int n,int g):t(n),g(g){} }; B是一个封闭类,生成封闭类对象的语句一定要让编译器能够弄明白其成员对象的是如何初始化的,否则就会编译错误. 封…
定义: string类是STL中basic_string模板实例化得到的模板类.其定义如下: typedef basic_string<char>string; 构造函数: string类有多个构造函数,但没有接收一个整型参数或一个字符型参数的构造函数 string s1(); //s1="" string s2("hello"); //s2="hello" string s3(4,'k'); //s3="kkkk"…
背景: 数组的长度是定义好的,在整个程序中固定不变.c++不允许定义元素个数不确定的数组.例如: int n; int a[n]; //这种定义是不允许的 但是在实际编程中,往往会出现要处理的数据数量在编程时无法确定的情况.如果总是定义一个尽可能大的数组,又会造成空间浪费.何况,这个“尽可能大”到底应该多大才够呢? 为了解决这个问题,c++提供了一种“动态分配内存”的机制,使得程序可以在运行期间,根据实际需要,要求操作系统临时分配一片内存空间用于存放数据.这种内存分配是在程序运行中进行的,而不是…
背景: 使用函数能够避免将相同代码重些多次的烦恼,还能减少可执行程序的体积,但也会带来程序运行时间上的开销.函数调用在执行时,首先在栈中为形参和局部变量分配存储空间,然后还要将实参的值复制给形参,接下来还要将函数的返回地址(改地址指明了函数执行结束后,程序应该回到哪里继续执行)放入栈中,最后才跳转到函数内部执行.这个过程是要耗费时间的.另外,函数执行return语句返回时,需要从栈中回收形参和局部变量占用的存储空间,然后从栈中取出返回地址,再跳转到该地址继续执行,这个过程也要耗费时间.总之,使用…
<C++ Primer Plus>学习笔记10 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<&…
原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INFO,PATH_INFO是什么呢?手册中提到“要使用路由功能,前提是你的URL支持PATH_INFO(或者兼容URL模式也可以,采用普通URL模式的情况下不支持路由功能),” , url支持path_info,不是apache要支持path_info么,度娘讲的还算清楚一点,见下文: pathinfo…
golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景.JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加…
Hadoop学习笔记(10) ——搭建源码学习环境 上一章中,我们对整个hadoop的目录及源码目录有了一个初步的了解,接下来计划深入学习一下这头神象作品了.但是看代码用什么,难不成gedit?,单步调试呢? 看程序不能调那多痛苦啊,想看跟踪一下变量,想看一下执行路径都难. 所以这里,我们得把这个调试环境搭建起来.Hadoop的主要代码是用java编写的,所以这里就选用eclipse作为环境. Hadoop目录下,本身就可以为作eclipse的一个工程来操作,但这里我不想,我想自己来建一个工程,…
转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int kill(pid_t pid,int signo); int raise(int signo); Both return: 0 if OK,−1 on error kill向进程号为pid的进程发送signo信号 可以看出 下面两行代码是等价的: kill(getpid(), signo); raise(sig…
mybatis学习笔记(10)-一对一查询 标签: mybatis mybatis学习笔记10-一对一查询 resultType实现 resultMap实现 resultType和resultMap实现一对一查询小结 本文使用两种方式(resultType和resultMap)实现一对一查询,查询订单信息,关联查询创建订单的用户信息 resultType实现 sql语句 确定查询的主表:订单表 确定查询的关联表:用户表 关联查询使用内连接?还是外连接? 因为orders表中有一个外键(user_…
一起来学matlab-matlab学习笔记10 10_1一般运算符 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 感谢张老师的书籍,让我领略到matlab的便捷 <MATLAB技术大全>葛超等编著 感谢葛老师的书籍,让我领略到matlab的高效 MATLAB语言以前是一种专门为进行矩阵计算所设计的语言,在以后的各个版本中逐步扩充其各种功能.现在MATLAB不仅仅局限于矩阵计算领域,但其最基本.最重要的功能还是进行实…
Spring 源码学习笔记10--Spring AOP 参考书籍<Spring技术内幕>Spring AOP的实现章节 书有点老,但是里面一些概念还是总结比较到位 源码基于Spring-aop 5.3.22 可能和旧版本有所差异但是大体逻辑一致 一丶AOP概述 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术. 是一种新的模块化机制,用来描述分散在对象,类,或函数中的横切关注点,分离关注点…
目标:使用小数取代整数 反模式:使用Float类型 根据IEEE754标识,float类型使用二进制格式编码实数数据. 缺点:(1)舍入的必要性: 并不是所有的十进制中描述的信息都能使用二进制存储,处于一些必要的因素, 浮点数通常是舍入到了一个非常接近的值.                   举例:select rate from A where id=123   --Result:59.95                           select * from A where ra…
</pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p><h3 style="margin:0px; padding:0px; color:rgb(51,51,51); font-family:Arial; line-height:26px; text-indent:28px">第三部分:显示全局异常信息,而不是局部异常信息.<…
SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可以只剩下en.js,zh.js,zh-cn.js 图片上传时图像信息中的预览会显示一堆英文信息,会干扰预览.找到ckeditor/plugins/image/dialogs/image.js,搜索“d.config.image_previewText”就能找到这段鸟语了,(d.config.imag…
Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式,将平时开发时最常用的一些数据库功能进行了封装,使得开发者不用编写一行SQL语句就可以完成各种建表.増删改查的操作.并且LitePal很“轻”,jar包大小不到100k,而且近乎零配置,这一点和Hibernate这类的框架有很大区别.目前LitePal的源码已经托管到了GitHub上. 关于对象关系…
#!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记10(元素属性.页面源码)'''from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.support.select import Selectimport reimport tim…
参考: 1,live555学习笔记10-h264 RTP传输详解(2) http://blog.csdn.net/niu_gao/article/details/6936108 2,H264 sps pps解析 http://download.csdn.net/detail/gyley2/5008185#comment…
在jdk中,为并发编程提供了CyclicBarrier(栅栏),CountDownLatch(闭锁),Semaphore(信号量),Exchanger(数据交换)等工具类,我们在前面的学习中已经学习并分析了CountDownLatch工具类的使用方式和源码实现,接下来我们继续学习CyclicBarrier,Semaphore,Exchanger的源码实现. 1. CyclicBarrier(栅栏) 1.1 CyclicBarrier的使用方式 在实际的并发中,我们可能需要等待所有线程到达一个数量…
springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmvc学习笔记10-springmvc注解开发之商品改动功能 需求 开发mapper 开发service 开发controller RequestMapping controller方法的返回值 本文以商品改动为例,记录springmvc的注解开发.包含mapper,service,controller,@RequestMapping,controller方法的返回值等 需求 操…