随笔分类 -  C、C++

1 2 下一页

学习记录,一份爱好。
如何动态设置CStatic的相关属性
摘要:VC++2010在窗体上放上ID为IDC_STATIC的CStatic控件,另放一按钮,点击按钮设置静态控件的内容和其它状态,代码如下:void CstaticProDlg::OnBnClickedButton1(){ // TODO: 在此添加控件通知处理程序代码 CStatic* p=(CStatic*)GetDlgItem(IDC_STATIC); p->SetWindowTextW(_T("你好")); p->EnableWindow(FALSE);//设置是否可用 p->ShowWindow(1); //0 为不可见 }我们也可以设置静态变量的I 阅读全文

posted @ 2012-12-12 14:52 天上星 阅读(2509) 评论(0) 推荐(0) 编辑

软件编译中步骤探询
摘要:我们在程序编译时会经历 预编译---编译---汇编---链接 这四个阶段。在高级语言中这些步骤不易察觉,下面是几个阶段要处理的内容:预编译:此过程主要处理源代码中以#开头的预编译指令,如 #if ,#include,#define等1.将所有的#define删除,并且展开所有的宏定义。2.处理所有条件预编译指令,比如:#if ,#endif,#ifdef等3.处理#include预编译指令,将被包含的文件插入到此指令的位置。注意:这个过程是递归调用的,也就是说这个文件 也可能包含其它文件。4.删除所有的注释,如://,/**/等5.添加行号和文件名标识名,以便编译器产生调试用的行号信息及用于编 阅读全文

posted @ 2012-03-06 09:36 天上星 阅读(880) 评论(0) 推荐(0) 编辑

VC中#ifdef和#pragma once的区别
摘要:有两个头文件: a.h和b.h//a.h//a.h#ifndef _a_h#define _a_hvoid amsg();#endif//b.h//b.h#pragma once void bmsg();它们的源代码为:a.cpp#include <STDIO.H>#include "a.h"void amsg(){ printf("Call a.msg()\n");}b.cpp#include "b.h"#include <STDIO.H>void bmsg(){ printf("Call b.ms 阅读全文

posted @ 2011-12-30 11:56 天上星 阅读(700) 评论(0) 推荐(0) 编辑

C++/CLI中DataGridView
摘要:在CLI编程中,有个DataGridView表格,可以显示相关的数据。它有三种模式:1.无约束模式 没有绑定数据库或其它物件,而是用手写代码给其填充数据的一种模式,一特产用dataGridView->Rows->Add()的形式加入数据。、2.有约束模式 用DataGridView的DataSource来绑定数据源,如数据库或文件。用BindingSource控件很方便用。3.虚拟模式 用DataGridView连接到内存中独立的数据源(数据缓存)以下为无约束模式的例子,是手工在一个表格中显示自己定义的数据,里面都有注释,代码大部分是写在窗体Form1的构造函数中。代码:#prag 阅读全文

posted @ 2011-10-07 15:07 天上星 阅读(2309) 评论(0) 推荐(0) 编辑

CLR中的委托和事件
摘要:还记得这个声明吗: Returntype (*lpfun)(params). 这是本地C++中的函数指针,即把此类型变量指针返回类型和实参一样的函数,就可以用此类型变量来执行此过程。如下:#include <iostream>typedef int (*lpfun)(int&);int getvalue(int& a){ return a;}void main(){ lpfun p=getvalue; int var=55; printf("the value is: %d\n",p(var));}结果为: 和函数指针一样,在C++/CLR中的事 阅读全文

posted @ 2011-09-28 11:33 天上星 阅读(861) 评论(0) 推荐(0) 编辑

类5-类的继承、虚函数、纯虚函数、虚析构函数
摘要:一、类的继承 就像家谱一样,就是一个继承图。爷爷-父亲-儿子-孙子等.类也一样,上面的类称为基类,也称父类。基类下面的类叫子类也叫派生类。 子类对父类的一些属性等有所继承也有所发展,因此才有了类的继承。 C++中类的继承格式为: class ChildClass:public ParentClass; 子类后面要加上冒号及类限制符(public\protected\private)和基类。 class CExample{ public: ... protected: ... private: ...}在一个类中,会有三个访问限制符。public 是公共,公开的意思,只要有对象访问C... 阅读全文

posted @ 2011-09-15 17:04 天上星 阅读(1150) 评论(0) 推荐(0) 编辑

类模板
摘要:类模板与原来的函数模板非常像,这里只给出了一个类模板的例子,其它的不多说了。#include <iostream>using namespace std;template<class T,class T2> //可含有多个类型,用逗号分开class CSamples //类的声明{public: CSamples(const T Values[],int count); //函数定义 CSamples(const T& value) { m_Values[0]=value; m_free=1; } CSamples() ... 阅读全文

posted @ 2011-09-14 15:32 天上星 阅读(215) 评论(0) 推荐(0) 编辑

运算符重载
摘要:我们平常用的+、-、*、/等基本类型,如果我们想用对象也进行如此的操作,就需要我们自定义类并重新实现这样的算法,这就是我们要说的运算符重载,有点像函数重载的味道。运算符重载不允许我们定义新的运算符也不允许改变它的优先级,它的优先级按照原来本身的优先级进行计算。其中有以下几种运算符不能重载: 作用域解析运算符 :: 条件运算符 ?: 直接成员访问运算符 . sizeof 运算符 sizeof 解除对指向类成员的指针引用运算符 .* 运算符的关键定为operator,后面我们常用的运算符号,operator和运算符之间有没有空格都可以,像<、>等中间不用有空格 ,但像特殊的运算符要有空 阅读全文

posted @ 2011-09-10 16:40 天上星 阅读(689) 评论(1) 推荐(0) 编辑

联合union
摘要:在过去内存受限的时候(最大才64M),C++中有一个功能允许多个变量共享同相同的内存(显然不能同时使用),我们称之为联合。如下例子:union Rsize{ double longth; float width; int height;} myuser;即联合中的三个变量共用一块内存。 Rsize为联合类型的名称,myuser为此种类型的变量。也可以不同时声明变量:union Rsize{ double longth; float width; int height;} ;在变量产生之前,并没有内存分配,这和类是一样的。如果不指明联合的名字,... 阅读全文

posted @ 2011-09-09 16:32 天上星 阅读(543) 评论(0) 推荐(0) 编辑

类4-析构和复制构造函数
摘要:类的构造函数是产生类对象,每产生一个类对象就会占用一定的内存,当类不用时,对象又是如何不再占用内存呢?这里就会用到析构函数,即销毁类对象用到的函数。如果一个类成员中没有析构函数,则编译器在销毁对象时会提供一个此函数进行对象销毁,把类数据成员变量从自由存储器中去除。一. 析构函数没有返回值,也不提供任何形参。 因此每个类只有一个析构函数。 它的命名为~加上类名即可。在类外定义时要加上类名和域名解析符。 #include <iostream>#include <cstring>using namespace std;class CBox{public: CBox(); ~. 阅读全文

posted @ 2011-09-09 15:12 天上星 阅读(252) 评论(0) 推荐(0) 编辑

类3-类的static属性
摘要:在类中的static数据成员或函数都是独立于对像的。即只要程序一运行,类就已存在了,这时不管此类的对象是否存在,但这些static的成员都已存在了。也就是说static成员只建立一次,在类产生时就建立了,与对象无关,但对象可以访问它。因此,在访问static成员时,对象不一定存在,所以就不能访问类的非static成员,所在在static函数中不能访问非static成员,否则编译器会报错。static的数据成员在开始时要初始化,因与对象无关,故在全局部分初始化此数据成员,初始化时不要带上static关键字,但要带上类名和作用域解析运算符。否则编译器以为是声明的新变量。static的函数成员在类外 阅读全文

posted @ 2011-09-08 10:49 天上星 阅读(1328) 评论(0) 推荐(0) 编辑

类2--类的const属性
摘要:大家记得这样的声明: const int rvalue=5;一、固定对象即rvalue是固定的,其值不容许改动。同理,当我们声明了一个类时,要产生一个固定的对象,即对象的数据成员是不容许再改动的。我们可以用这样的方式处理(以上节CBox类为例):const CBox box(10,20,5);这样我们就产生了一个以10X20X5尺寸大小的对像,这个对象不允许再被改动。被声明为const的对象它的指针this也是const的,所以指向的对像是不能改动的。二、类的const成员函数 格式为在类的成员函数头后面加上const即可。 此时把此函数指针也指定为const,这时不能在函数定义的内部给类的. 阅读全文

posted @ 2011-09-08 10:02 天上星 阅读(548) 评论(0) 推荐(0) 编辑

类1
摘要:请看下面的类及其调用:#include <iostream>using namespace std;class CBox{private: float m_long,m_width,m_height; void mytest() { cout<<endl <<m_long <<endl; }public: void testcall(); CBox(float lv,float wv=0,float hv=0):m_long(lv),m_width(wv),m_height(hv) { ... 阅读全文

posted @ 2011-09-06 15:48 天上星 阅读(278) 评论(0) 推荐(0) 编辑

函数重载与函数模板
摘要:一、函数重载重载就是函数名相同但实参的类型或数量不同的函数的调用。注意有两种:实参是类型不同或数量不同。(为什么不说形参,因为会有默认值的存在)如得到一数组中最大值,因为有int和double基本的类型,一个函数无法表达int getmax(int intArr[],int len);double getmax(double douArr[],int len);为什么要同名? 主要是方便记忆。如你输入getmax后,编译器会自动给你提示有这样的函数且会把它的形参类型带出来,便于选择。当然你也可以写成不同的名称: getintmax,getdoublemax.多个在一程序中的同名函数就是函数重. 阅读全文

posted @ 2011-08-31 11:44 天上星 阅读(3267) 评论(0) 推荐(0) 编辑

定义struct类型
摘要:看下下面的代码:typedef struct tagUser{ char* pItem; short Age; tagUser* pNext;}User;typedef: 定义一个新类型或为一类型起个别名。struct: 表示为一结构体类型.tagUser:类型名称。以后可以以此类型声明变量,如 tagUser myUser;User: 类型 tagUser的别名,即它们是同种类型,可以这样声明一变量: User myuser;我们在User类型的结构体内会看到pNext的指针,它指向下一个本类型的地址,它的类型为struct tagUser,即我们所说的链表。.如果我们变成以下代码... 阅读全文

posted @ 2011-08-31 10:39 天上星 阅读(3890) 评论(0) 推荐(0) 编辑

函数指针与返回指针的函数
摘要:如下两个例子1. int* lpfun(int,int);2. int (*lpfun)(int,int);第一种是我们熟悉的函数指针,即函数的返回值为int类型的指针第二种一定要用括号把*号和lpfun括起来,这种类型与第一种不一样,是指向一种函数地址的指针。这个函数的返回类型是int型,实参也为int型。#include <stdio.h>using namespace std;int* lpfun1(int,int); //声明一个返回指针为int类型的函数int lpfun2(int,int); //普通函数typedef int (*lpfunPointer)(int,i 阅读全文

posted @ 2011-08-26 14:38 天上星 阅读(16226) 评论(0) 推荐(0) 编辑

动态内存分分配
摘要:大多数程序在运行时,计算机中会有部分的内存未分配,这些内存叫堆或叫自由存储器。我们可以用new操作符在堆中为特定类型的变量分配空间,返回值是分配给此变量的内存地址。释放分配的空间是用delete操作符。在内存中操作指针比操作变量本身速度更快更有效,特别是对于数组。一 给简单变量分配动态内存如我们要在内存中给一double型变量分配空间,我们可以先声明一个double型指针,然后再给此对象赋值: double* pdata=NULL; pdata=new double; *pdata=3.665;(等同于pdata=new doulbe(3.665);) delete pdata; pdata= 阅读全文

posted @ 2011-08-16 15:55 天上星 阅读(423) 评论(0) 推荐(0) 编辑

指针及数组
摘要:一.指针 我们所申请的变量或数组都分配在内存中,它们在内存中存放的地址值可以被存在另个变量中,即一个变量指向它们在内存中的地址,这个指向内存变量地址的变量即为指针。如变量为 aa的在内存中的地址为0x6859ef.而0x6859ef又存放在bb的变量中,通过访问bb就可以找到aa,这个变量bb就是指向aa的指针。 变量在内存中是根据数据类型的大小分配的,以字节为单位。1.在C++中指针的声明形式为: type* variable=NULL; type *varialble=NULL; type表示类型,*号可以靠近type写也可以靠近varialble写,根据各人喜好。 NULL表示此指针中的 阅读全文

posted @ 2011-08-16 11:00 天上星 阅读(209) 评论(0) 推荐(0) 编辑

强制类型转换
摘要:两种强制类型转换: 老式: int a=(int)b; 新式: int a=static_cast<int>(b);即产生一临时变量,这个变量存储b变成int类型的值,且不影响b,把此变量的值赋给a后自动消失。对b没有影响。类型转换分为隐式转换和显式转换。 1. 隐式转换是指编译器自动进行转换, 不用用户指明类型。编译器遵循的原则是把占用空间小的类型扩展为空间大的类型。如: double a=0.0; float b=12.3355; a=b; 编译器会自动把精度为7的浮点型数据转变为精度为15的double类型,这样不会使数据因超过内存空间而溢出。 2. 强制转换表示这个转换是人 阅读全文

posted @ 2011-08-10 17:24 天上星 阅读(285) 评论(0) 推荐(0) 编辑

运算符顺序和位运算符
摘要:位运算符: &(AND):表示二元数全为真时结果为真。 >(OR):或,表示二元数有一个为真时结果为真 ^(EOR):异或。只有二元数全为1时,结果为0.即相同为0 ~:取反。一元操作符,为1时结果为0,为0时结果为1 >>:位右移。即操作数以二进制形式向右边移动的位数。 <<:位左移. 即操作数以二进制形式向工边移动的位数。 它们的格式也可变为: LValue op= RValue; 如: a &=b 等价于 a=a & b; <<和>>操作对于无符号整数相当于 原值乘以2的n次方或原值除于2的n次方,n为移动的位 阅读全文

posted @ 2011-08-10 10:26 天上星 阅读(704) 评论(0) 推荐(0) 编辑

1 2 下一页
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示