Vb教程 Vb.net教程 Vfp教程 C/C++教程 Vc/Vc++教程 Delphi教程 Java教程 Powerbuilder
  杀毒频道 | 短信频道 | 网络电视 | 论文中心 | 学上网 | 学软件 | 网页特效 | 电脑基础 | 论坛  
  NCRE | 软考 | CET | 职称英语 | 司法考试 | 报关员 | 公务员 | CATTI | CPA考试  
  Html教程 | Css教程 | Xml教程 | Asp教程 | Asp.net | Php教程 | Jsp教程 | Linux教程 | QQ技巧  
Photoshop Illustrator ImageReady Maya教程 3D Max教程 Lightscape Coredraw教程 Authorware Autocad教程 Freehand教程
Access教程 Mysql教程 Sql server Oracle教程 Word教程 Excel教程 Powerpoint Frontpage Asp.net源码 Php源代码
Flash教程 Fireworks Dreamweaver C#教程 outlook教程 系统安装 vbscript教程 Javascript Jsp源代码 Asp源代码
您的位置:首页 >> C/C++教程 >> 正文

『21天精通C++』第二周学习笔记(2-3)
文章来源:pconline

作者:雷神
转载请联系作者

第十三天:构造函数是成员函数。

   当对对象数据处理结束后可以用析构函数以自定义的方式将其清除。析构函数是用来清除数据的特殊成员函数。
   记住:构造函数和析构函数是进行对象数据的创建,初始化,清除工作的成员函数,可以重载构造函数,使一个类不止具备一个构造函数,因有时需要以这些方法中的某一种分别创建不同的对象。不能重载析构函数。

   构造函数作为成员函数和类有相同的名字。例:一个类名为:aClass,构造函数就是aClass()。构造函数没有返回值,而且不能定义其返回类型,void也不行。析构函数同样使用这一点。当编写重载函数时,只有参数表不同,通过比较其参数个数或参数类型可以区分两个重载函数。

//包含三个构造函数的类头
class Children{
char name[25];
int age;
float Weight;
public:
void prData(void);
char * getname(void);
int getage(void);
float getWeight(void);
Children(void);//三个构造函数的声明;
Children(int,float);
Children(char *,int,float);
~Children();//析构函数
};


   析构函数作为类的成员函数也具有和类相同的名字,不同的是在函数其前多了一个~符号。名为aClass的类的析构函数~aClass()。一个类只能有一个析构函数,析构函数为成员函数没有参数,没有返回值,不能重载。
   如果构造函数为数据成员分配了内存空间,那么析构函数做的就是释放内存。只要变量在其作用域范围之内,其值都是有效的。

   VC++在定义变量时调用构造函数,在变量出了作用域时调用析构函数。时机是自动的。
   构造函数和析构函数应该是公用成员函数。
   构造函数原型可以带缺省参数。但不能和空参数同时在不带参数的情况下使用。

   当定义对象数组时,编写构造函数和析构函数。当创建数组时,VC++用构造函数构造对象数组中的每一个元素。而在出了作用域要清除数组时,由析构函数来释放所有对象。
   创建包含指针成员的对象时,应重灾赋值操作符的函数和拷贝构造函数。

  拷贝构造函数是一种特殊类型的构造函数。它的参数是一个对象变量的引用。当根据某个对象初始化新对象时,或是通过引用传递返回对象时,需要调用拷贝构造函数。

//////////////////////////////////////////////////////////////
//字符串类string弥补了VC++没有字符串的缺憾
//copyright rbg and 2000
//Filename:StrClass.cpp
//////////////////////////////////////////////////////////////
#include
#include
class String{
char *st;
public:
String &operator=(const String &);
friend String operator+(const String &,const String &);
friend ostream &operator<<(ostream &,const String &);
String();
String(const char *);
String(const String &);
~String();
};
String &String::operator=(const String &s)
{
if(this==&s)
{return *this;}
delete [] st;
st=new char[strlen(s.st)+1];
strcpy(st,s.st);
return * this;
}
String::String()
{
st='\0';
}
String::String(const char *s)
{
st=new char[strlen(s)+1];
strcpy(st,s);
}
String::String(const String &s)
{
st=new char[strlen(s.st )+1];
strcpy(st,s.st );
}
String::~String ()
{
delete []st;
}
String operator+(const String &source,const String &tar)
{
if(!strlen(source.st))
return tar;
else if(!strlen(source.st))
return source;
String temp;
temp.st=new char[strlen(source.st)+strlen(tar.st)+1];
strcpy(temp.st,source.st );
strcat(temp.st ,tar.st );
return temp;
}
ostream &operator<<(ostream &out,const String &s)
{
out< return out;
}
////////////////////////////////////////////////////////////////////////
main(){
String myname;
String youname("zhangsan");
String hisname=youname;
myname="renbugang";
cout<<"My name is:"< cout<<"You name is:"< cout<<"His name is:"< hisname="lisi";
cout<<"His name chanage:"< String ourname;
ourname=myname+youname+hisname;
cout<<"Our name is:"< return 0;
}

第十四天:关键字static(静态),它保证了局部变量在块结束时不被破坏。

   static放在int,float等数据类型标识符前,也可以放在自定义的数据类型名前。static也称延长生存。和全局变量的静态生存期对应的是局部变量缺省的动态生存期。

   全局变量是静态的,不可能被定义为动态。全局变量自它的定义之处开始一直到源码结束都有效。若在全局变量的前面加上关键字static,则表示该全局变量拥有文件作用域。
   与全局变量相仿,在函数前冠以关键字static可以限制该函数的可见性,使得其余与这个文件相连的文件无法使用它。如果别文件使用了同名的不会发生冲突。
   如果希望另一个源文件在连接完后调用文件中的非静态函数,必须在所有调用此函数的文件中说明原型,并冠以关键字extren.

   非静态的全局变量和函数具有外部连接性,也就是说现行源文件之外的代码也可以使用这些没有用static定义的全局变量和函数,静态全局变量和函数具有内部连接性,只有现行文件可以使用。
   执行程序回到块中希望保持其变量的值,使用static定义其局部变量。
   VC++为每个类仅保留一套成员函数,每个对象都有其所属类的成员函数的函数指针。
   静态数据成员通常用来记录已创建对象的个数,例如,构造函数每次调用时将其静态成员加一,在析构函数中将相应的静态成员减一。

   使用作用域操作符::访问静态数据成员和成员函数,静态成员不于任何对象相连,所以必须通过类调用静态函数或访问静态成员。
   利用静态的成员函数访问私有的静态数据成员。
   在main()前初始化静态数据成员,在静态数据成员前加数据类型。
   使用静态数据成员记录类的使用情况,如总计或平均值。

几个概念:

   编译:将源代码(.cpp)转换为目标代码(.obj)。
   目标代码:源文件的内部二进制表示形式。是机器能理解的程序格式,源代码是程序员能理解的程序格式。
   连接:将所有的有关的目标代码连接成一个单独的可执行文件(.exe)。
   可执行文件:程序被编译连接后的状态。
   把程序分成几个文件,特别是类的头部和类的实现部分应该分离出来,这样能保证使用类的程序清晰易读。

[返回]

编程语言 web开发 数据库 网络技术 操作系统 服务器 网页设计 图形设计 办公软件 常用软件 学电脑

Copyright© www.bianceng.cn Powered by 编程入门网 All Rights Reserved.
关于本站 | 版权声明 | 联系我们 | 友情链接 |
编程入门网 版权所有