实验六_静态成员

合集下载

c++实验6——12

c++实验6——12

void display();
protected:
string name;
int age;
char sex;
string address;
string telephone;
string title;
};
void teacher::display()
{
cout<<"姓名:"<<teacher::name<<endl;
实验题目
实验六 利用静态成员编程
实验室
9307 实验时间
年月 日
实验类别
验证
同组人数
1
成绩
一、实验目的
1.理解静态数据成员的作用,学会其定义和初始化。 2.理解静态成员函数的使用,并通过它访问静态数据成员。 3.学会静态成员的访问。
二、实验内容
1.定义一个类 Student 记录学生计算机课程的成绩,要求使用静态成员变量或静态成员函数计算 全班计算机课程的总成绩和平均成绩。 2. 添加程序代码: #include <iostream.h> #include <string.h> class Person {static int total;
1.
2. #include<iostream>
#include<string>
using namespace std;
class teacher
{
public:
teacher(string
nam,int
a,char
s,string
t):name(nam),age(a),sex(s),address(ad),telephone(tele),title(t){}

实验六_静态成员

实验六_静态成员

实验六静态成员1、实验目的:1)掌握静态数据成员的定义及使用;2)掌握静态成员函数的定义及使用。

2、实验内容:2.1 分析下面的程序,指出程序运行的结果。

1)习题 3.20代码:#include<iostream>using namespace std;class aClass{public:aClass(){total++;}~aClass(){total--;}int gettotal(){return total;}private:static int total;};int aClass::total=0;int main(){aClass o1,o2,o3;cout<<o1.gettotal()<<"objects in existence\n";aClass *p;p= new aClass;if(!p){cout<<"Allocaon error\n";return 1;}cout<<o1.gettotal();cout<<"objects in existence after allocation\n";delete p;cout<<o1.gettotal();cout<<"objects in existence after deletion\n";return 0;}程序运行结果如下:3objects in existence4objects in existence after allocation3objects in existence after deletionPress any key to continue2)#include<iostream >using namespace std;class Sample{int a,b;static int c;public:Sample(){a=b=0;c++;}void show(){cout<<"a="<<a<<','<<"b="<<b<<','<<"c="<<c<<endl;}};int Sample::c=1;int main(){Sample a1,a2;a1.show();a2.show();return 0;}程序运行结果如下:a=0,b=0,c=3a=0,b=0,c=3Press any key to continue3)习题 3.24代码:#include<iostream>using namespace std;class N{private:int A;static int B;public:N(int a){A=a;B+=a;}static void f1(N m);};void N::f1(N m){cout<<"A="<<m.A<<endl;cout<<"B="<<B<<endl;}int N::B=0;int main(){N P(5),Q(9);N::f1(P);N::f1(Q);return 0;}程序运行结果如下:A=5B=14A=9B=14Press any key to continue简要分析:1、静态成员是类的一个成员,在创建对象前就为它分配了内存空间,并且它的数值是供所有对象共享的一种特殊的成员。

实验六静态成员与友元

实验六静态成员与友元

实验六静态成员与友元实验六静态成员与友元【实验目的】1.掌握友元函数的定义、使用方法以及特点。

2.握静态成员函数和静态数据成员的功能。

【实验内容】1.调试下列程序,写出输出结果,并分析输出结果。

#include "iostream.h"class My{public:My(int aa){A=aa;B-=aa;}static void fun(My m);private:int A;static int B;};void My::fun(My m){cout<<"A="<<m.a<<endl;< bdsfid="86" p=""></m.a<<endl;<>cout<<"B="<<b<<endl;< bdsfid="88" p=""></b<<endl;<> }int My::B=100;int main(){My P(6),Q(8);My::fun(P);Q.fun(Q);return 0;}2.设计一个含有静态成员、静态成员函数的程序,分析程序结果,理解静态成员(函数)与类和对象的关系。

参考程序:#includeclass A{friend class B;//友元类的声明public:void Set(int i){x=i;}friend int add(A & f1);// 友元函数的声明void Display()cout<<"x="<<x<<",y="<<y<<endl;< bdsfid="110" p=""></x<<",y="<<y<<endl;<>}private:int x;static int y;};int add(A & f1){return f1.x+1;}class B{public:B(int i,int j);void Display();private:A a;//A类的对象a作为类B的私有成员};int A::y=1;//静态成员必须先赋初值B::B(int i,int j){a.x=i;A::y=j;}void B::Display(){cout<<"x="<<a.x<<",y="<<a::y<<endl;< bdsfid="135" p=""></a.x<<",y="<<a::y<<endl;<>}void main(){A b;b.Set(5);//友元函数的调用cout<<add(b)<<endl;< bdsfid="142" p=""></add(b)<<endl;<>b.Display();B c(6,9);//a.x=6,X::y=9;c.Display();b.Display();}问题:⑴、分析友元函数add()的定义、调用与成员函数的区别。

实验6-静态成员和友元

实验6-静态成员和友元
修改后代码如下:
#include <iostream>
#include <cstring>
using namespace std;
class CTeacher;
class CStudent
{
public:
CStudent(char *n, int a);
~CStudent();
int age;
friend class CTeacher;
cout<<"CStudent::nTotalObj="<<CStudent::nTotalObj<<endl;
}
问题一:以上程序编译能通过吗,为什么?
问题二:成员变量nTotalObj在程序中起什么作用,它是如何实现的?
问题三:如果规定该程序的主函数和类CStudent中的成员变量的属性不允许改变,应该如何改正该程序?
private:
char *name;
};
CStudent::CStudent(char *n, int a):age(a)
{
int nLen = strlen(n);
name = new char[nLen+1];
strcpy(name,n);
name[nLen] = '\0';
}
CStudent::~CStudent()
2.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。
#include <iostream.h>
#include <string.h>
class CStudent
{

c++静态成员实验指导书

c++静态成员实验指导书

实验三、静态成员一、目的要求1. 熟练掌握C++语言中静态成员的定义、实现方法。

2. 掌握静态成员在类中的作用。

二、实验内容1. 阅读并运行示例代码,记录输入和运行结果,完成下列内容:①程序目前有一处错误,不能编译运行,将错误语句和改正后的语句写在实验报告上。

②解释print_task类中的三个静态成员变量都起到什么作用,print_task类的构造函数和析构函数都执行了什么功能。

③解释printer类构造函数和析构函数都执行了什么功能。

④解释语句content= task_count+'a';完成的功能。

⑤成员变量content存储了要打印的内容,为程序简单,目前是一个字符。

事实上它应该是一个指向要打印内容的指针,它是否应该被声明为private类型,为什么?⑥为何要在程序顶部加class printer;简短声明?2. 当前用对象数组表示了打印任务,方法比较笨拙,修改print_task类,将打印任务用链表表示。

(供学有余力者选作)3. 这个程序执行时,实际上假设当前系统只有一台打印机,如何让每个打印任务被不同打印机打印,思考应当如何修改程序。

(供学有余力者课后思考)#include "stdafx.h"#include <iostream>using namespace std;//如在VC6中运行,删去上面两行,去掉下面一行的注释//#include <iostream.h>class printer;class print_task{public:static int task_count;static bool printer_status;static print_task* task_list;static void print();print_task(){content= task_count+'a'; task_count++;}~print_task(){ task_count--;}char content;};int print_task::task_count=0;print_task::printer_status = false;print_task* print_task::task_list=0;class printer{public:printer(){print_task::printer_status=true;}~printer(){print_task::printer_status=false;}static void print(){int i;for (i=0; i<print_task::task_count; i++)cout<< (print_task::task_list+i)->content << endl;}};void print_task::print(){if(printer_status)printer::print();elsecout<< "打印机未启动\n";}int main(){int count;cout<< "请输入要建立的打印任务数量\n";cin >> count;print_task::task_list = new print_task[count];print_task::print();printer prt;print_task::print();delete [] print_task::task_list;return 0;}三、实验提示1. VC6开发环境的使用l创建工程:点击菜单File(文件)→new(新建),在弹出的对话框内选择Win32 Console Application,在右侧右侧Project Name下输入项目名,并在Location文本框输入,或点击其右侧按钮,选择项目文件存储的目录,完成后单击OK按钮。

C++实验报告之静态成员、运算符重载

C++实验报告之静态成员、运算符重载

题目1:定义一个复数类,通过重载运算符:*,/,直接实现二个复数之间的乘除运算。

编写一个完整的程序,测试重载运算符的正确性。

要求乘法“*”用友元函数实现重载,除法“/”用成员函数实现重载。

源程序1/*******************第1题*******************//******************单森汉*****************//******************2012-5-1*****************/#include<iostream>using std::cout;using std::endl;class Complex{float Real, Image;public:Complex(float r=0,float i=0) { Real=r;Image=i;}void Show(){cout <<"Real="<<Real<<'\t'<<"Image="<<Image<<'\n';}friend Complex operator *(Complex &, Complex &);Complex operator /(Complex &); //重载运算符+Complex operator +( Complex &);friend Complex operator -(Complex &, Complex &);};Complex operator *( Complex &c1,Complex &c2){Complex t;t.Real=c1.Real * c2.Real - c1.Image * c2.Image;t.Image = c1.Image*c2.Real +c1.Real* c2.Image;return t;}Complex Complex::operator /(Complex &c){Complex t;t.Real =(Real *c.Real+ Image * c.Image)/(c.Real*c.Real+ c.Image * c.Image);t.Image = (Image *c.Real - Real * c.Image)/(c.Real*c.Real+ c.Image * c.Image);return t;}Complex Complex::operator + ( Complex &c){Complex t;t.Real = Real + c.Real;t.Image = Image + c.Image;return t;}Complex operator -(Complex &c1, Complex &c2){Complex t;t.Real=c1.Real-c2.Real;t.Image=c1.Image-c2.Image;return t;}void main(){Complex c1(1,2),c2(3,4),c3;c3=c1*c2;cout<<"两个复数的乘法c3=c1*c2:";c3.Show();c3=c1/c2;cout<<"两个复数的除法c3=c1/c2:";c3.Show();Complex c4(1,2),c5(3,4),c6,c7(1,2),c8(3,0),c9; c6=c4+c5;cout<<"两个复数的加法c6=c4+c5:";c6.Show();c6=c4-c5;cout<<"两个复数的减法c6=c4-c5:";c6.Show();c9=c7+c8;cout<<"一个复数与一个实数的加法c9=c7+c8:"; c9.Show();c9=c7-c8;cout<<"一个复数与一个实数的减法c9=c7-c8:"; c9.Show();}运行结果截图题目2:定义一个向量(一维数组)类,通过重载运算符实现向量之间的加法和减法。

实验6 静态成员和友元函数

实验6 静态成员和友元函数

实验六静态成员和友元函数一、实验目的1)掌握静态成员的定义和使用2)掌握友元函数设计的方法3)掌握友元函数的含义,友元函数和成员函数的区别。

二、实验题目题目1. 设计一个类,分析静态数据成员的引用方法要求:(1)阅读程序,理解静态成员变量的声明与引用方法。

(2)调试程序,观察a.xPos, a.yPos, b.xPos, b.yPos, a.count, b.count, Point::count这七个变量的存储地址。

由此,你得出什么结论?代码提交要求:提交整个工程的源代码及得出的结论。

题目2 静态成员账户类Account定义如下。

其中静态成员count和InterestRate表示账户数量和利率,静态成员函数GetCount返回账户数目,GetInterestRate返回银行利率。

要求实现该类。

题目3 友元函数为账户类Account增加一个友元函数,实现账户结息,要求输出结息后的余额(不计算利息税),并在main函数中调用进行测试。

friend void Update(Account& a);题目4(选做题)在main函数中,设计一个Account类型的数组,为数组中的10个对象初始化,并调用成员函数测试存款、取款、显示等函数,再调用友元函数测试进行结息。

⏹Account accArray[10]; //静态数组的方法⏹Account * accArray= new Account [10]; //动态数组的方法cout<<"帐户数目:"<<Account::GetCount()<<endl;注:1. 用以上方法时,会调用缺省构造函数,此时应将构造函数修改成缺省构造函数,例如:Account(char accno[] = “000”, char name[]=”noname”, double b=0.0)2. 对各对象再进行设置时,可增加一个setData函数,用于设置账号、姓名和余额。

实验六 静态成员

实验六  静态成员

实验六静态成员1、实验目的掌握类中静态成员的定义方法,掌握静态数据成员的初始化方法、静态数据成员和静态成员函数的访问和使用方法。

2、实验内容(1)商店销售某一商品,商店每天公布统一的折扣(discount)。

同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购10件以上者,还可以享受9.8折优惠。

现已知当天3名销货员的销售情况为:销货员号(num) 销货件数(quantity) 销货单价(price)101 5 23.5102 12 24.56103 100 21.5请编程序,计算出当日此商品的总销售款sum,以及每件商品的平均售价。

要求用静态数据成员和静态成员函数。

(提示:将折扣discount、总销售款sum和商品销售总件数n声明为静态数据成员,再定义静态成员函数average(求平均售价)和display(输出结果)。

// 123.cpp : 定义控制台应用程序的入口点。

//#include"stdafx.h"#include<iostream>using namespace std;class product{private:int num,quantity;float price;static float discount,sum;static int n;public :product (int m,int q,float p):num(m),quantity(q),price(p){};void total();static float average();static void display();};void product::total(){float rate =1.0;if (quantity>10)rate=rate*0.98;sum=sum+quantity*price*rate*(1-discount);n=n+quantity;}void product::display(){cout<<sum<<endl;cout<<average()<<endl;}float product::average(){return (sum/n);}float product::discount =0.05;float product::sum =0;int product::n=0;int _tmain(int argc, _TCHAR* argv[]){product prod[3]={product(101,5,23.5),product(102,12,24.56),product(103,100,21.5)};for(int i=0;i<3;i++)prod[i].total ();product::display();return 0;}(2)编写程序,统计歌手大赛参赛人数,每名选手的平均得分。

静态成员实验报告

静态成员实验报告

一、实验目的1. 理解静态成员函数的概念及其在类中的作用。

2. 掌握静态成员函数的声明和定义方法。

3. 通过实验验证静态成员函数的特性和使用场景。

二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 编程语言:C++三、实验内容1. 静态成员函数的定义和作用2. 静态成员函数的访问权限3. 静态成员函数与普通成员函数的区别4. 静态成员函数的初始化5. 静态成员函数的调用四、实验步骤1. 创建一个名为“StaticMember”的类,包含以下成员:- 私有成员变量:int a, b;- 公有成员函数:void setAB(int, int); // 设置成员变量a和b的值- 公有静态成员函数:void printAB(); // 打印成员变量a和b的值2. 在主函数中,创建一个StaticMember类的对象obj,并调用setAB函数设置成员变量a和b的值。

3. 调用静态成员函数printAB,打印成员变量a和b的值。

4. 再次调用静态成员函数printAB,观察结果。

5. 尝试在类的内部访问静态成员函数,并分析结果。

6. 尝试在类的内部访问非静态成员变量,并分析结果。

7. 修改StaticMember类的成员变量为静态变量,再次进行实验,观察结果。

五、实验结果与分析1. 静态成员函数的定义和作用实验结果显示,静态成员函数可以访问静态成员变量,但不能访问非静态成员变量。

静态成员函数在类中只有一个副本,无论创建多少个类的实例,静态成员函数都指向同一个副本。

2. 静态成员函数的访问权限实验结果显示,静态成员函数的访问权限与普通成员函数相同,遵循封装原则。

3. 静态成员函数与普通成员函数的区别静态成员函数不能访问非静态成员变量,而普通成员函数可以访问静态成员变量和非静态成员变量。

4. 静态成员函数的初始化实验结果显示,静态成员函数的初始化与普通成员函数相同,在构造函数之前执行。

静态成员和实例成员小结

静态成员和实例成员小结

静态成员:在类的成员的类型或者返回值类型前面加上关键字static,就可以将该成员定义为静态成员。

常量或类型声明会隐式地声明为静态成员,其他没有用static修饰的成员都是实例成员。

静态成员属于类,被这个类的所有实例所共享;实例成员属于对象(类的实例),每一个对象都有实例成员的不同副本。

下面看一下静态成员和实例成员的特点:静态成员:1>静态成员必须通过类名使用.运算符来引用,而不能用对象来引用。

2>一个静态字段只标识一个存储位置。

无论创建了一个类的多少个实例,它的静态字段在内存中都只占用同一块区域。

3>静态函数成员(方法,属性,事件,运算符或构造函数)不能作用于具体的实例,在这类函数成员中不能直接使用实例成员,必须通过类名来引用。

实例成员:1>实例成员必须通过对象名使用.运算符来引用,而不能用类名来引用。

2>类的实例字段属于类的实例所有,每创建一个类的实例,都在内存中为实例字段开辟了一块区域。

类的每个实例分别包含一组该类的所有实例字段的副本。

3>类的函数成员(方法,属性,索引器,实例构造函数或析构函数)作用于类的给定的实例,在它们的代码体内可以直接引用类的静态和实例成员。

下面用具体的代码来看它们的用法。

/**//* 要点:静态成员属于类,实例成员属于对象(类的实例)静态成员必须通过类名使用.运算符来引用,而不能用对象来引用实例成员必须通过对象名使用.运算符来引用,而不能通过类名来引用*/using System;usingSystem.Collections.Generic;usingSystem.Text;namespace ConsoleApplication5...{ class Program ...{ int x; //实例字段static int y; //静态字段void F() //实例方法...{x = 1; //正确,实例方法内可以直接引用实例字段y = 1; //正确,实例方法内可以直接引用静态字段}static void G() //静态方法...{// x = 1; //错误,静态方法内不能直接引用实例字段y = 1; //正确,静态方法内可以直接引用静态字段}static void Main(string[] args) //静态方法...{Program t = new Program(); //创建对象t.x = 1; //正确,用对象引用实例字段//t.y = 1; //错误,不能用对象引用实例字段//Program.x = 1; //错误,不能用类名引用实例字段Program.y = 1; //正确,用类目引用静态字段t.F(); //正确,用对象引用实例方法//t.G(); //错误,不能用对象名调用静态方法// Program.F(); //错误,不能用类目调用实例方法Program.G(); //正确,用类名调用静态方法}}}数据成员:数据成员可以分静态变量、实例变量两种.静态成员:静态成员变量是和类相关联的,可以作为类中"共"有的变量(是一个共性的表现),他不依赖特定对象的存在,访问的时候通过类名加点操作符加变量名来访问.实例成员:实例成员变量是和对象相关联的,访问实例成员变量依赖于实例的存在.函数成员:方法可以主要分为静态方法,实例方法静态方法:静态方法是不属于特定对象的方法,静态方法可以访问静态成员变量,静态方法不可以直接访问实例变量,可以在实例函数调用的情况下,实例变量做为参数传给静态方法。

静态成员和友元实验报告

静态成员和友元实验报告
(3)判空,即判断当前栈(即链表)是否为空,也就是判断记录数组中数据元素个数的变量是否为0。
三、概要设计(实现的功能,函数原型及说明等)
应用VC++6.0的编辑环境构造一个类Stack,设计一个整数链表类,实现栈操作。类中需有记录结点个数的数据成员(静态成员),要有判空操作。编制应用程序,取100次随机数(<1000),如果取到的随机数比前一个随机数大的话,入栈,然后逐个取出(即出栈过程)求其和。
对本次试验进行总结:
1.作时应认真仔细。对代码进行分模块测试,
2.应对实验整体架构进行了解。
3.实验操保证其正确性。
4.试验完后对错误进行总结分析。
七、附录(源程序代码,需有相应注释)
#include<iostream>
#include<stdlib.h>
#include <malloc.h>
#include<stdio.h>
return true;
}
int Stack::Pop() //出栈函数
{
SNode *p=new SNode;
int e;
static int count=1;
p=head;
e=p->data;
head=p->next;
free(p);
count++;
return e;
}
int GetSum(Stack &A)求和函数定义
{
count++;
A.Push(x);
cout<<x<<" ";
if(count%10==0)

C++静态成员和非静态成员的区别和使用

C++静态成员和非静态成员的区别和使用

C++静态成员和⾮静态成员的区别和使⽤C++静态成员和⾮静态成员的区别和使⽤ 对象与对象之间的成员变量是相互独⽴的。

要想共⽤数据,则需要使⽤静态成员和静态⽅法。

只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进⽽可以使⽤静态成员变量。

(因为静态成员变量在对象创建之前就已经被分配了内存空间) 静态成员变量虽然在类中,但它并不是随对象的建⽴⽽分配空间的,也不是随对象的撤销⽽释放(⼀般的成员在对象建⽴时会分配空间,在对象撤销时会释放)。

静态成员变量是在程序编译时分配空间,⽽在程序结束时释放空间。

静态成员的定义和声明要加个关键static。

静态成员可以通过双冒号来使⽤,即<类名>::<静态成员名>。

初始化静态成员变量要在类的外⾯进⾏。

初始化的格式如下:数据类型类名::静态成员变量名 = 初值; 不能⽤参数初始化表,对静态成员变量进⾏初始化。

既可以通过类名来对静态成员变量进⾏引⽤,也可以通过对象名来对静态成员变量进⾏引⽤。

普通成员函数和静态成员函数的区别是:普通成员函数在参数传递时编译器会隐藏地传递⼀个this指针.通过this指针来确定调⽤类产⽣的哪个对象;但是静态成员函数没有this指针,不知道应该访问哪个对象中的数据,所以在程序中不可以⽤静态成员函数访问类中的普通变量. 下⾯通过⼏个例⼦来总结静态成员变量和静态成员函数的使⽤规则。

⼀、通过类名调⽤静态成员函数和⾮静态成员函数1 //例⼦⼀:通过类名调⽤静态成员函数和⾮静态成员函数2 class Point{3 public:4 void init()5 {}67 static void output()8 {}9 };1011 void main()12 {13 Point::init();//此处编译错误⾮静态成员函数必须和对象对应14 Point::output();15 } 编译出错:错误 1 error C2352: “Point::init”: ⾮静态成员函数的⾮法调⽤ 结论⼀:不能通过类名来调⽤类的⾮静态成员函数 ⼆、通过类的对象调⽤静态成员函数和⾮静态成员函数1 //例⼦⼆:通过类的对象调⽤静态成员函数和⾮静态成员函数2 class Point{3 public:4 void init()5 {6 }78 static void output()9 {}10 };1112 void main()13 {14 Point pt;15 pt.init();16 pt.output();17 } 编译通过。

C++静态成员变量和静态成员函数的使用方法总结

C++静态成员变量和静态成员函数的使用方法总结

C++静态成员变量和静态成员函数的使⽤⽅法总结⼀.静态成员变量:类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。

和其他数据成员⼀样,静态数据成员也遵守public/protected/private访问规则。

同时,静态数据成员还具有以下特点:1.静态数据成员的定义。

静态数据成员实际上是类域中的全局变量。

所以,静态数据成员的定义(初始化)不应该被放在头⽂件中。

其定义⽅式与全局变量相同。

举例如下:xxx.h⽂件class base{private:static const int _i;//声明,标准c++⽀持有序类型在类体中初始化,但vc6不⽀持。

};xxx.cpp⽂件const int base::_i=10;//定义(初始化)时不受private和protected访问限制.备注:不要在头⽂件中定义(初始化)静态数据成员。

在⼤多数的情况下,这样做会引起重复定义这样的错误。

即使加上#ifndef #define #endif或者#pragma once也不⾏。

2.静态数据成员被类的所有对象所共享,包括该类派⽣类的对象。

即派⽣类对象与基类对象共享基类的静态数据成员。

举例如下:class base{public :static int _num;//声明};int base::_num=0;//静态数据成员的真正定义class derived:public base{};main(){base a;derived b;a._num++;cout<<"base class static data number _numis"<<a._num<<endl;b._num++;cout<<"derived class static data number _numis"<<b._num<<endl;} // 结果为1,2;可见派⽣类与基类共⽤⼀个静态数据成员。

静态数据成员课程设计

静态数据成员课程设计

静态数据成员课程设计一、课程目标知识目标:1. 学生能够理解静态数据成员的概念,掌握其在类中的定义和使用方法。

2. 学生能够解释静态数据成员的内存分配特点,并了解其在程序中的作用和优势。

3. 学生能够区分静态数据成员与普通成员变量的不同之处,并掌握其访问方式。

技能目标:1. 学生能够运用静态数据成员编写简单的类和对象程序,实现对共享数据的操作。

2. 学生能够通过实际案例,学会使用静态数据成员解决实际问题,提高编程能力。

3. 学生能够运用静态数据成员进行类的封装,提高代码的可维护性和可读性。

情感态度价值观目标:1. 学生通过学习静态数据成员,培养对程序设计的好奇心和探究精神,增强学习兴趣。

2. 学生在团队合作中,学会倾听他人意见,提高沟通与协作能力。

3. 学生通过解决实际问题,认识到编程在实际生活中的应用价值,培养解决问题的能力和创新精神。

课程性质:本课程为计算机科学课程,旨在帮助学生掌握C++面向对象程序设计的基础知识,提高编程能力。

学生特点:学生处于高中阶段,已具备一定的编程基础和逻辑思维能力,对新鲜事物充满好奇心。

教学要求:结合学生特点和课程性质,采用案例教学、任务驱动等方法,引导学生主动探索,培养实践能力和创新精神。

通过分解课程目标为具体学习成果,为教学设计和评估提供依据。

二、教学内容1. 静态数据成员的定义与声明:介绍静态数据成员的概念、语法和基本使用方法,对比普通成员变量的特点。

- 教材章节:第三章“类的成员”2. 静态数据成员的内存分配与访问:分析静态数据成员在内存中的存储方式,讲解静态成员的访问控制。

- 教材章节:第三章“类的成员”3. 静态数据成员的应用实例:通过实际案例,展示静态数据成员在计数、统计等场景中的应用。

- 教材章节:第三章“类的成员”及第四章“类的实例”4. 静态成员函数与静态数据成员的关系:介绍静态成员函数的定义与使用,以及与静态数据成员的关联。

- 教材章节:第四章“类的实例”5. 静态数据成员的初始化:讲解静态数据成员的初始化方法,以及静态成员的构造和析构顺序。

C#中的静态成员、静态方法、静态函数之说.doc

C#中的静态成员、静态方法、静态函数之说.doc

C#中的静态成员、静态方法、静态函数之说.docC#静态成员I静态方法I静态构造函数一、静态成员(static)(1)静态成员属于类所有,非静态成员属于类的实例所有。

⑵ 每创建一个类的实例,都会在内存中为非静态成员新分配一块存储;非静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域。

二、静态方法(1)静态方法属于类所有,类实例化前即可使用。

(2)非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。

因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存,这样,静态方法调用时无法判断非静态变量使用的内存地址。

所以无法使用?而静态变量的地址对类来说是固定的,故可以使用。

三、静态构造函数(1)用于对静态字段、只读字段等的初始化。

⑵添加static关键字,不能添加访问修饰符,因为静态构造函数都是私自有的。

⑶ 类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类任何静态成员才激发静态构造函数?(4)静态构造函数是不可继承的,而且不能被直接调用。

⑸ 如果类中包含用来开始执行的Main方法,则该类的静态构造函数将在调用Main方法之前执行。

任何带有初始值设定项的静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定项。

(6)如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。

(7)无参数的构造函数可以与静态构造函数共存。

尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。

MSDN对静态构造函数的解释:静态构造函数用于初始化任何静态数据,或用于执行仅需执行一次的特定操作。

在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。

静态构造函数具有以下特点:⑴静态构造函数既没有访问修饰符,也没有参数。

(2)在创建第一个实例或引用任何静态成员之前,将自动调用静态构造⑶函数来初始化羹。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验六静态成员
1、实验目的:
1)掌握静态数据成员的定义及使用;
2)掌握静态成员函数的定义及使用。

2、实验内容:
2.1 分析下面的程序,指出程序运行的结果。

1)习题 3.20
代码:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1="ABC";
string s2="DEF";
string s3("GHI");
string s4,s5;
s4=s1;
cout<<"s4 is "<<s4<<endl;
s5=s1+s2;
cout<<"s1+s2 is "<<s5<<endl;
s5=s1+"123";
cout<<"s1+\"123\"is"<<s5<<endl;
if(s3>s1)
cout<<"s3>s1"<<endl;
else cout<<"s3<s1"<<endl;
if(s4==s1)
cout<<"s4==s1"<<endl;
else cout<<"s4<>s1"<<endl;
cout<<"请输入一个字符串给s5:";
cin>>s5;
cout<<"s5 is "<<s5<<endl;
return 0;
}
程序运行结果如下:
s4 is ABC
s1+s2 is ABCDEF
s1+"123"isABC123
s3>s1
s4==s1
请输入一个字符串给s5:ok!
s5 is ok!
Press any key to continue
2)
#include<iostream >
using namespace std;
class Sample
{
int a,b;
static int c;
public:
Sample()
{
a=b=0;
c++;
}
void show()
{
cout<<"a="<<a<<','<<"b="<<b<<','<<"c="<<c<<endl;
}
};
int Sample::c=1;
int main()
{
Sample a1,a2;
a1.show();
a2.show();
return 0;
}
程序运行结果如下:
a=0,b=0,c=3
a=0,b=0,c=3
Press any key to continue
3)习题 3.24
代码:
#include<iostream>
using namespace std;
class Myclass
{
public:
void set(int i,int j)
{a=i;
b=j;
}
void show()
{
cout<<a<<" "<<b<<endl;
}
private:
int a,b;
};
int main()
{
Myclass o1,o2;
o1.set(20,5);
o2=o1;
o1.show();
o2.show();
return 0;
}
程序运行结果如下:
20 5
20 5
Press any key to continue
简要分析:
1、静态成员是类的一个成员,在创建对象前就为它分配了内存空间,并且它的数值是供所有对象共享的一种特殊的成员。

2、静态成员包括静态成员数据和静态成员函数。

3、静态成员函数必须要有确定的值,而且必须在类体内声明一次。

由于在类定义中不能对成员数据据直接进行初始化,因此必须在类体外再声明一次并进行初始化。

在类体内声明时,静态成员数据和静态成员函数前都必须加关键字static,而在类体外声明时就不用再写了。

2.2编写并调试程序。

1)编写一个名为score的类,用于统计一个班的学生成绩。

其中使用一个静态成员数据totals来存储总分及一个静态成员函数re_totals()返回该总分。

并编写相应的测试程序。

程序编写如下:
#include<iostream >
using namespace std;
class score
{
int mark[10];
public:
static int tals;
static int num;
static int re_tals()
{return tals;}
void set()
{ int i;
for(i=0;i<10;i++)
{
cin>>mark[i];
tals=tals+mark[i];
num++;
}
cout<<"The scores of the class are following: "<<endl;
for(i=0;i<10;i++)
{cout<<mark[i]<<' ';}
cout<<'\n';
}
int get_num(void)
{return num;}
};
int score::tals=0;
int score::num=0;
int main()
{
score t;
cout<<"Please input the scores of the class:"<<endl;
t.set();
cout<<"The number of the scores is: "<<t.get_num()<<endl;
cout<<"The total score of the class is: "<<t.re_tals()<<endl; return 0;
}
程序运行结果:
Please input the scores of the class:
15 65 45 98 36 12 88 66 44 55
The scores of the class are following:
15 65 45 98 36 12 88 66 44 55
The number of the scores is: 10
The total score of the class is: 524
Press any key to continue
3、实验总结:。

相关文档
最新文档