vc++笔记 基础

原创 2007年10月08日 16:12:00

1.c++程序
   在编译和运行时不会对数组进行越界检查。
2.指针
  指针就是地址,用于存放内存地址的变量。有相应的数据类型。如,int *pointer或int* pointer
  & 取地址运算符  ,* 指针运算符。
  &用于取出变量的地址,* 以指针作为其操作数据,其运算结果表示所指的变量
  & 和 * 互为反运算
3.数组
  a[]="hello" 字符数组的长度为6,字符串长度为5.
4.转义字符.
  /对后面的特殊字符,进行还原. 如/" 得到".
5.字符串
  char *str="this is a test";
6.结构定义
定义时不能初始化
 特殊的数据类型
 struct struct_name{
 datatype membername;
};
struct_name var_name;
引用成员 . 和->
7.枚举类型
定义: enum enum_name{member1,member2=3,member3}
使用: enum_name var_name=member1;
8.typedef定义
typedef 数据类型,新的类型名
typedef int INTEGER;
9.switch
  在switch 中,表达式与常量的类型必须一致,且只能是字符型,整型,枚举型
10. 函数
 函数的默认类型为int,若不返回值则用void
函数不充许嵌套
参数传递: 值,(单向)按地址(双向),引用(双向)
函数原型
如void swap(int*,int*);
void swap(int* px,int* py)    
调用外部函数 [extern] int yourfun(int,int)   通常,可将所有外部函数的声明放在一个头文件中,然后用#include指令包头文件.
void myfun(int val=10);当有多个缺省的值时,须放在右边。即(myfun(int w,int y=1,int x=2) )
myfun();如果函数调用,省略实参数,则把缺省的值10传递给形参。//等同于myfun(10)
调用函数时,如果省略了某个实参,则其右边的都得省略。
内联函数,即在函数头前加上inline,当调用时,将函数体替换为调用语句。因此这样内存开销很大。
inline int sum(int x){}
11.引用
数据类型  &引用名 = 变量名
如 int  Actuallint=10;
int &otherint=actualint;
otherint++;  //同时执行actualint++
actualint=70 ;//同时执行 otherint=70
引用最在用处是函数调用
原型声明 void swap(int&,int&);
void swap (int& x, int& y){}
12.使用作用域限定符::来标识同名的全局变量
13.动态分配内存
new
p = new type[size]  type 数据类型  size表示要为多少个变量分配空间,省略size为1;p 是一个type类型的指针变量,指向所分配的存储单元
如 int* pNum=new int[12]

delete
delete用于释放new分配的内存空间 delete p;
如果要释放一个动态数组所占用的内存空间,采用如下形式:delete []pa;

14.编译预处理
#include 文件包含指令  #include <文件名> #include "文件名"  两者有区别
#define  宏定义指令   #define <宏名> <宏体>       宏体是任意字符序列  #define MAX
#define (宏名) (参数1,...)  #undef <宏名>
条件编译指令 以 #if #ifdef #ifndef 开始  最后以#endif结束
#if ... [#else] ... #endif
#ifdef ... [#else] ... #endif
#ifdef ... [#else] ... #endif

15类的函数实现
 returndatatype classname :: functionName().....
16. 编码约定
类的定义放在头文件中(.h)
类的实现放在源文件中(.cpp)
main函数放在另一文件中,可用#include 编译预处理指令包含头文件.
17.对象声明
objectname obj1,obj2;
point *pt1=&obj1;
18.对象成员的访问
.   ->  来访问非私有成员
19.构造函数和析构函数
构造函数:是创建对象时,(声明或new动态创建)系统自动调用的成员函数。和类名相同 如,classname
析构函数:是在对象生存结束是系统自动调用的成员函数。必须在类名前加上~  如,~classname
他们都没有返回值。
他们的实现跟一般函数相同。
自动调用:classname objname(...) 在main函数中自动调用
  当退出main()主函数时自动调用析构函数
析构函数的调用与构造函数的调用顺序相反。
栈:后进先出表。
20.this的用法。
指当前对象
调用对对象成员方法时,编译器会将对象的地址赋值给this指针,并将该地址值加入到参数列表中.如,EndTime.showTime(&EndTime);

display(this); //以this指针作为参数
21静态成员的声明
public:
        static int m_ncount;
初始化放在类定义的外部
int person :: m_nCount=0;
为类的所有对象共享,只有一份,存储在同一个内存空间
22.静态成员变量的访问。
对象访问。person1.m_ncount=100
类名和作用域限定符(::)int person:: m_nCount=100
在成员函数中访问 m_nCount++;
私有和保护静态成员:只能在成员函数中访问
23.静态成员函数
静态成员没有this指针,
可能通过对象,类名,作用域限定符,在成员函数中来调用静态成员函数。
静态成员函数,只能访问静态成员。不过可以通过将对象作为静态成员函数的参数,然后在成员函数中通过对象访问它的非静态成员。static long getid(person)
24.友元函数
不是类的成员函数,可以访问类所有成员包括私有成员和保护成员。
声明: friend void display(a);
friend void B::BMemberFun(A&);//另一个类B成员函数
25.派生类的定义
class 〈派生类名> :【派生方式】 <基类名>{...}
派生方式: pulic private protected (缺省为private)
public: 保持不变  派生类的成员函数可以访问基类非私有成员(包括protected,public),派生类的对象可以访问基类的公有成员
private:都成为私有的,只充许在派生类的成员函数中访问基类的非私有成员。private 很少用
protected 保护的和公有的成为保护成员,只允许在派生类成员函数访问非私有成员
private:  都是私有的
26.显式方式的构造函数的定义
类B是类A的派生类
B::(<...>):A(...){}
27多重继承
用逗号隔开
28.多重继承的二义性问题
 使用作用域限定符(::)
 如,d d1;
d1.B::a=100;
d1.c::a=100;
29虚基类方式定义派生类
即一个基类,为所有派生类共享。只存在一个派生类。
定义派生类的方法:是在基类的前面加上关键字virtual,而基类的定义与一般的完全一样。
如,class b:virtual public a
30.多态性
编译时多态性:重载 
运行时多态性:虚函数
31.用基类指针指向派生类对象
声明一个派生类对象同时也声明了一个基类对象
派生类的对象可以认为是其基类的对象。C++允许一个基类对象的指针指向其派生类的对象。
不允许派生类对象的指针指向其基类的对象。
即使将一个基类对象的指针指向其派生类的对象,通过该指针也只能访问派生类中从基类继承的公有成员,不能访问派生类自定义的成员,除非通过强制类型转换将基类指针转换为派生类指针。
32.虚函数的声明
要将一个成员函数声明为虚函数,只需在定义基类时在成员函数声明的开始的位置加上关键字virtual.
如,class A
{ public:
 virtual void show (){};
};
当重载时,基类指针,指向的派生的对象,调用的成员函数将是派生类的,这与没重载时相反。
33.联编
重载:静态多态性或编译时多态性
虚函数:动态多态性或运行时多态性
34. 构造函数、析构函数、虚函数
基于构造函数的特点,不能将构造函数定义为虚函数
 如果使用虚析构函数,无论是指针所指的对象是基类对象还是派生类对象,程序执行时都会调用对应的析构函数。
25.抽象类
用于继承,提供统一的接口,框架,由派生类实现。可以声明指向抽象类的指针
定义:至少有一个成员函数没有实现(也叫纯虚函数)
      定义了一个protected属性的构造函数或析构函数
26纯虚函数
不定义具体的实现的成员函数,不能被调用,仅提供统一的接口。
声明:virtual <数据类型> <成员函数> (形参表)=0;
只有重新定义基类中的所有纯虚函数,该派生类才不会成为抽象类。
26。函数重载(只对参数而言的)
定义:指一组功能类同但函数参数类型(个数)不同的函数可以共用一个函数名
不能利用返回类型,引用来进行函数重载。
构造函数的重载
27.
运算符重载:指结于不同数据类型的操作数,同一个运算符所代表的运算功能可不同。
重载运算符的形式:编写一个运算符函数,重载运算(函数)的原型为:
<数据类型》 operator <运算符>(<形参表>)
利用普通函数重载运算符。或成员函数重载
28.模板
定义:不指定某些参数的数据类型的函数,在函数模板被调用时根据实际参数的类型决定template <class t>  //t 用定义函数的参数和返回值,在函数体中用来声明变量。多个类型参数有逗号隔开。如,template <class t1,class t2,class t3>
T abs(T val)
{}

template <class t1,class t2>
t1 max(t1 x, t2 y){
return ....
}
只能定义非成员函数
定这些函数模板参数的类型。
将数据类型参数化
分为:函数模板和类模板
参数据的数据项类型不确定。
提高了软件的重用性
实例化由编译器完成
30.类模板
是对类的抽象。
用来生成多个功能相同而某些数据成员的类型不同或成员函数的参数及返回值的类型不同的类。
定义:
template <class T>
class Mytempclass{
private:
 T x;
public :
 void setX(T a){};
 t getX(){};
};

如查模板类外定义了模板类的成员函数,那须采用如下形式:
template <class t>
void myTemclass<t> :: setX(t a)
{x=a;
}
实例化由编译器完成
通过声明对象时所给出的实际数据类型确定参数。如,mytemclass <int> intObject;
编译器先替代T为int,生成一个类,然后创建intObject

多个参数的类模板的定义:template <class t1, int i, class t2>
声明:mytemclass <int,100,float> myobject
31.
运行时类型识别
dynamic_cast运算符检查一个基类指针是否向其派生类对象;dynamic_cast <type-id>(exp)   //type-id派生类对象指针    exp基类指针

typeid运算符标识指针所指类型  typid(1)=typeid(int)
32.命名规范
采用前缀
n  整表
lp 指针
C 类
 

Python笔记之入门(基础篇)

Python 3笔记之入门Python简单介绍  Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其...
  • zhangyifei521
  • zhangyifei521
  • 2016年05月15日 15:31
  • 5172

【Unity3D】基础知识学习笔记

Unity3D基础知识学习笔记 1、基础知识: 标题栏 菜单栏 工具栏:变换工具、gizmos切换、播放控件、层列表、布局列表 功能窗口 2、资源及资源类型:在project里面能够create的资...
  • woaini454186694
  • woaini454186694
  • 2016年05月25日 22:53
  • 4571

《Python基础教程》第6~8章 学习笔记

《Python基础教程》 学习笔记 第二弹,6-8章。markdown排版。
  • hcbbt
  • hcbbt
  • 2014年01月26日 17:44
  • 2203

vc++学习——windows应用程序基础(no.1)

vc++相当于一套IDE,是编程工具  ,采用的语言是c++ ,这是vc++ 与c++的区别 vc++开发应用程序主要使用两种方法: windows提供的Windows API函数...
  • Harrd
  • Harrd
  • 2013年03月18日 15:35
  • 589

VC++动态链接库编程之基础慨念

1.概论    先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上...
  • bzhxuexi
  • bzhxuexi
  • 2014年06月17日 10:51
  • 565

[精通WindowsSocket网络开发-基于VC++实现]第三章——WindowsSockets基础—概念

本章重点讲解WindowsSockets的基本知识。协议特征,IP定址,TCP和UDP Socket应用程序所调用的windows Sockets API,套接字选项。 Windows Socket...
  • ouyangshima
  • ouyangshima
  • 2013年05月22日 21:36
  • 1752

VC++动态链接库编程之基础慨念

http://dev.yesky.com/430/2142930.shtml  1.概论    先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把...
  • holandstone
  • holandstone
  • 2012年12月06日 19:35
  • 415

VC++学习日志 MFC基础

转载地址:HTTP://WWW.CNBLOGS.COM/LTT1987/ARCHIVE/2006/07/23/457845.HTML CWnd类封装了所有与窗口操作相关的操作 Wi...
  • canhui2009
  • canhui2009
  • 2012年05月28日 17:50
  • 261

VC++串口通信基础知识

在Win32下,可以使用两种编程方式实现串口通信,其一是使用ActiveX控件(ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM))...
  • wangshubo1989
  • wangshubo1989
  • 2015年08月18日 10:26
  • 1931

VC++游戏编程----基础动画显示1

一、定时器 Timer定时器对象可以再每隔一段时间发出一个时间消息,程序收到消息后,就可以执行一些操作。比如,可以设置定时器来播放静态的连续图片,就可以产生动画效果。这也是通常显示动画的一种方式。 ...
  • xuguangsoft
  • xuguangsoft
  • 2012年04月09日 20:47
  • 4259
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:vc++笔记 基础
举报原因:
原因补充:

(最多只允许输入30个字)