快捷搜索:  
C++类静态数据成员与类静态成员函数

C++类静态数据成员与类静态成员函数

在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢? 这个问题便是本章的重点: 声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数。 下面我们用几个实例来说明这个问题,类的成员需要保护,通常情况下为了不违背类的封装特性,我们是把类成员设置为protected(保护状态)的,但是我们为了简化代码,使要说明的问题更为直观,更容易理解,我们在此处都设置为pu...

入门教程:实例详解C++友元

入门教程:实例详解C++友元

在说明什么是友元之前,我们先说明一下为什么需要友元与友元的缺点: 通常对于普通函数来说,要访问类的保护成员是不可能的,如果想这么做那么必须把类的成员都生命成为public(共用的),然而这做带来的问题遍是任何外部函数都可以毫无约束的访问它操作它,c++利用friend修饰符,可以让一些你设定的函数能够对这些保护数据进行操作,避免把类成员全部设置成public,最大限度的保护数据成员的安全。 友元能够使得普通函数直接访问类的保护数据,避免了类成员函数的频繁调用,可以节约处理器开销,提高程序的效率,但矛盾的...

C++类对象的复制-拷贝构造函数

C++类对象的复制-拷贝构造函数

在学习这一章内容前我们已经学习过了类的构造函数和析构函数的相关知识,对于普通类型的对象来说,他们之间的复制是很简单的,例如: int a = 10; int b =a; 自己定义的类的对象同样是对象,谁也不能阻止我们用以下的方式进行复制,例如: #include iostream using namespace std; class Test { public: Test(int temp) { p1=temp; } protected: int p1; }; void main() { Test a(...

C++面向对象编程入门:构造函数与析构函数

C++面向对象编程入门:构造函数与析构函数

我们先说一下什么是构造函数。 上一个教程我们简单说了关于类的一些基本内容,对于类对象成员的初始化我们始终是建立成员函数然后手工调用该函数对成员进行赋值的,那么在c++中对于类来说有没有更方便的方式能够在对象创建的时候就自动初始化成员变量呢,这一点对操作保护成员是至关重要的,答案是肯定的。关于c++类成员的初始化,有专门的构造函数来进行自动操作而无需要手工调用,在正式讲解之前先看看c++对构造函数的一个基本定义。 1.C++规定,每个类必须有默认的构造函数,没有构造函数就不能创建对象。 2.若没有提供任何...

C++面向对象编程入门:类(class)

C++面向对象编程入门:类(class)

结构体的掌握非常重要,重要在哪里呢?重要在结构体和类有相同的特性,但又有很大的区别,类是构成面向对象编程的基础,但它是和结构体有着极其密切的关系。 我们在c语言中创建一个结构体我们使用如下方法: struct test { private: int number; public: float socre; }; 类的创建方式和结构体几乎一样,看如下的代码: class test { private: int number; public: float socre; public: int rp() {...

新手入门:C/C++中的结构体

新手入门:C/C++中的结构体

什么是结构体? 简单的来说,结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型,第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。 定义结构体使用struct修饰符,例如: struct test { fl...

exit()与return()函数的差别

exit()与return()函数的差别

exit()子程序终止函数与return()函数的差别 在main函数中我们通常使用return (0);这样的方式返回一个值。 但这是限定在非void情况下的也就是void main()这样的形式。 exit()通常是用在子程序中用来终结程序用的,使用后程序自动结束跳会操作系统。 但在如果把exit用在main内的时候无论main是否定义成void返回的值都是有效的,并且exit不需要考虑类型,exit(1)等价于return (1) #include iostream #include string...

C/C++中函数指针的含义

C/C++中函数指针的含义

函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢? 如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。 定义一个指向函数的指针用如下的形式,以上面的test()为例: int (*fp)(int a);//这里就定义了一个指向函数的指针 函数指针不能绝对不能指向不同类型,或者是带不同形参的函数,在定义函数指针的时候我们很容易犯如下的错误。 int *fp(int a);//这里是错误的,因为按照结合性...

对C++中引用的补充说明(实例)

对C++中引用的补充说明(实例)

#include iostream #include string using namespace std; void main(int argc,char* argv[]) { int a=10; int b=20; int rn=a; coutrn"|"aendl; coutrn"|"aendl;//c++中是无法取得应用的内存地址的,取引用的地址就是取目标的地址! rn=b;//把引用指向另一个目标----变量b coutrn"|"a"|"bendl; rn=100;//试图改变b的值 couta...

C/C++中命令行参数的原理

C/C++中命令行参数的原理

很早以前的dos应用程序中,我们经常会用命令行参数执行应用程序例如: copy c:\1.txt d:\ 在c/c++中,命令行参数的传递是利用main进行形参传递实现的 前面的教程中我们对面都进行了void main()或者是void main(void)的定义,这表示main不返回任何类型,和main不带有任何参数,但在缺剩状态下mian()这样形式下,形式参数一直是存在在栈空间内的只是隐藏了起来。 为了实现命令行参数我们将使用main(int argc,char* argv[])这样的形式进行定义...

一个临时文件程序

一个临时文件程序

1 #include 2 #include "stdio.h" 3 #define MAXLINE 8192 4 main() 5 { 6 char name[L_tmpnam], line[MAXLINE]; 7 FILE *fp; 8 printf("%s\n",tmpnam(NULL)); 9 tmpnam(name); 10 printf("%s\n", name); 11 if((fp = tmpfile()) == NULL) 12 printf("tmpfile error"); 13 f...

堆栈的一些相关知识

堆栈的一些相关知识

一般认为在c中分为这几个存储区 1栈 - 有编译器自动分配释放 2堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静 态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束释放 4另外还有一个专门放常量的地方。 - 程序结束释放 在函数体中定义的变量通常是在栈上,用malloc, calloc, realloc等分配内存的函数分 配得到的就是在堆上。在所有函数体外定义的...