类的定义(总结)

时间:2024.4.13

1.         定义类employee,要求包含数据成员:name和salary,name要求用于存储职工的姓名,salary用于存储职工的工资,定义对应的默认构造函数,析构函数和赋值运算符,并定义类的对象a和b,要求b使用a进行赋值(即,b调用赋值运算符函数将对象a的值赋给b)。要求:默认构造函数、析构函数和赋值运算符中都需要加入输出语句

#include<iostream>

using namespace std;

class Employee

{

private:

       char name[80];

       int salary;

public:

       Employee(char *s=" ",int a=0)

       {

              cout<<"Employee(char *s=" ",int a=0)"<<endl;

              strcpy(name,s);

              salary=a;

       }

       ~Employee()

       {

              cout<<"called  ~Employee()"<<endl;

       }

       Employee &Employee::operator=(const Employee &r)

       {

              cout<<"Employee &Employee::operator=(const Employee &r)"<<endl;

              strcpy(name,r.name);

              salary=r.salary;

              return *this;

       }

       void print()

       {

              cout<<"name:"<<name<<" "<<"salary:"<<salary<<endl;

       }

};

void main()

{

      

       Employee a("jom",20),b;

       a.print();

       b=a;

       b.print();

}

2.         在前一题的基础上定义company类,要求将employee的对象作为该类的数据成员,另外,company还包含一个数据成员name,用于存储公司的名称,定义对应的默认构造函数和析构函数,并且在主程序中定义company类的对象c,观察对象c的创建过程和析构过程。要求:默认构造函数、析构函数和赋值运算符中都需要加入输出语句

#include<iostream>

using namespace std;

class Employee

{

private:

       char name[80];

       int salary;

public:

       Employee(char *s=" ",int a=0)

       {

              cout<<"Employee(char *s=" ",int a=0)"<<endl;

              strcpy(name,s);

              salary=a;

       }

       ~Employee()

       {

              cout<<"called  ~Employee()"<<endl;

       }

       Employee & operator=(const Employee &r)

       {

              cout<<"Employee &Employee::operator=(const Employee &r)"<<endl;

              strcpy(name,r.name);

              salary=r.salary;

              return *this;

       }

       void print()

       {

              cout<<name<<" "<<salary<<endl;

       }

};

class Company

{

       Employee p;

       char name[80];

public:

       Company(Employee q,char *m=" "):p(q)

       {

             

              cout<<"Company(Employee q,char *m=" "):p(q)"<<endl;

              strcpy(name,m);

       }

       ~Company()

       {

              cout<<"   ~Company()"<<endl;

       }

       void print()

       {

              p.print();

              cout<<name<<endl;

       }

};

void main()

{

       Employee a("zhoudong",3200),b;

       a.print();

       b=a;

       b.print();

       Company c(b,"apple");

       c.print();

3.         定义类fact,包含一个数据成员n,以及两个数据函数factn()和factsum(),factn()用于计算n!的值,而factsum()用于计算1!+2!+3!+……+n!的值,并将各个计算结果返回,要求在主函数中定义两个对象a(3)和b(5),调用相应的数据成员,并将计算结果输出

#include <iostream>

using namespace std;

class fact

{

       int n;

public:

       fact(int a)

       {

              n=a;

       }

          int factn()

          {             

                 cout<<"called int factn()"<<endl;

          int j=1;           

          for(int i=1;i<=n;i++)

          {

                 j*=i;

          }

                   return j;

       }

       int factsum()

       {           

              cout<<"called int factsum()"<<endl;           

        int j=1,sum=0;

          for(int i=1;i<=n;i++)      

          {                           

                  j*=i;      

              sum=sum+j;

                         

          }             

              return sum;

}

       void Print()

       {           

       cout<<factn()<<" "<<factsum()<<endl;      

       }

};

void main()

{    

   fact b(5);

   b.Print();         

   fact c(3);

   c.Print();

}


第二篇:有关于类的定义赋值与调用总结 收藏


有关于类的定义赋值与调用总结 收藏

本类的成员函数:

定义: 类中声明: 返回值类型 函数名(参数表) ; //写了函数体就自动成为内联函数,这就

是隐式声明。或者也可以不写,

先在类中声明,在类外定义。

类外定义: 返回值类型 类名::函数名(参数表) {…}; //前面加inline就表示内联函数,这是

显式声明。

调用: 对象名.公有成员函数名(参数表) //在这里只能访问到类的公有成员 例如: 类中声明: void SetTime( int, int , int );

类外定义: inline void Clock::SetTime( int n, int s, int t )

{ Hour = h; Minute = m; Second = s; }

myClock.SetTime()

声明对象:

定义: 类名 对象名;

例如: Clock myClock;

本类的构造函数:

定义: 类中声明: 类名(参数表); //可以利用重载,定义无参、有参的构造函数,赋初始值。

类外定义: 类名::类名(参数表){…}

例如: Clock::Clock() { Hour = 0; Minute = 0; Second = 0 } // 无参的默认构造函数

Clock::Clock( int h, int m, int s )

{ Hour = h; Minute = m; Second = s; } // 有参的构造函数

本类的拷贝构造函数:

定义: 类中声明: 类名( 类名 &对象名);

类外定义: 类名( 类名 &对象名){ 类成员的初始化…成员名= 对象名.成员名}

//其实系统会自动生成一个默认的,它把具有构造函数初始值的

数据成员都复制到新建立的对象中,相当于克隆。如果自己定义的话,

它其实就是使用一个已经存在的的对象,去初始化同类的一个新对象

例如: Poine::Point( Point &p )

{ X = p.X; Y = p.Y; } //注意这里是用参数表中的对象成员来初始化新对象

使用: 类名 新对象( 旧对象 )

例如: Point A ( B ); //此时被自动调用

本类的析构函数:

定义: 类中声明: ~类名( );

类外定义: 类名::~类名( ){…} //注意:它无参数,函数体中做后续工作

例如: ~Clock() {…}

~Poing() { countP--; }

组合类_构造函数:

定义: 类中声明: 类名(形参表);

类外定义: 类名::类名(所有形参)

:内嵌对象1(形参表),内嵌对象2(形参表)...{ 利用子类对象进行母类的成员初

始化… }

//其实很简单,在第一个形参表中将所有要用到的参数全部写

全。然后在:后面将内嵌对象都列出来,参数写上。在函数体中

利用剩下的参数对剩下的母类成员赋值

例如: Line( Point xp1, Point xp2 );

Line::Line( Poine xp1, Point xp2 ):p1( xp1 ),p2( xp2 )

{ x = p1.GetX() – p2.GeX(); len = sqrt( x * x ); }

组合类_拷贝构造函数:

定义: 类中声明: 类名( 类名 &对象名);

类外定义: 类名::类名( 类名 &对象名 )

:内嵌对象1(形参表),内嵌对象2(形参表)...{ 利用子类对象进行母类的成员初始

化… }

//与组合类_构造函数的类似

例如: Line:: Line ( Line &L ) : p1 ( L.p1 ), p2 ( L.p2 ) { len = L.len; }

本类的静态数据成员:

定义: 类中声明: static 数据类型 标识符;

类外赋值: 数据类型 类名::标识符 = 值; //注意它不属于任何对象,只能在类外赋初值。

并且它要通过非内联函数来访问

调用: 类名∷标识符

例如: static int countP;

int Point::countP = 0;

本类的静态函数成员:

定义: 类中声明: static 返回值类型 函数名(参数表) ;

类外定义: 返回值类型 类名::函数名(参数表) {…} ; //它一般用来访问本类

的静态数据成员、

静态函数成员

调用: 类名::函数名 或者 对象名.函数名

例如: static void add() { countP++; }

Point::add() ;

Mypoint.add();

类的友元函数:

定义: 类中声明: friend返回值类型 函数名(参数表) ;

类外定义: 返回值类型 函数名(参数表) {…}; //在类中用关键字friend修饰的非成员函数,

在它的函数体中可以访问类的私有和

保护成员

调用: 函数名(参数表);

例如: friend float Fdist( Point &, Point & );

float Fdist( Point &p1, Point &p2 )

{ x = p1.X – p2.X; y = p2.Y – p2.Y; return sqrt ( x*x + y*y ); }

类的友元类:

定义: 类中声明: friend class 友类名; //友类的所有函数都可以访问本类的私有和保护成员,

但这种关系非传递、单向、非继承的

例如: friend class A;

类的对象指针:

定义: 类名 *对象指针名;

访问: 对象指针名->成员名(参数) 或者

( *对象指针名).成员名(参数)

例如: Point p1; //先初始化类对象

Point *p_point; //再定义类的对象指针

p_point = &p1 //再赋值

p1->GetX(); //最后使用,就有如通过对象名访问一样

动态创建对象:

定义及赋值:类名 *对象指针名;

赋值: 对象指针名 = new 类名(构造函数参数表);

定义/赋值: 类名 *对象指针名 = new类名(构造函数参数表);

访问: 对象指针名->成员名(参数) 或者

( *对象指针名).成员名(参数) //和上面一样

销毁: delete 对象指针名

例如: Point *Ptr = new Point1( 1, 2 )

Delete Ptr

类的对象数组:

定义: 类名 数组名[下标表达式];

调用: 数组名[下标].成员函数(参数表); //要记得是下标从0开始计算,创建时用默认的构造函数

来创建,此时初始值就派上了用场

例如: Point A[2];

A[0].Move( i+10, i+20 );

动态创建对象数组:

定义及赋值:类名 *对象指针名 = new 类名[下标表达式]

调用: 对象指针名[下标].成员函数(参数表)

销毁:delete [] 对象指针名

例如:Point *Ptr = new Point[2]

Ptr[2].Move( 5, 10 )

Delete [] Ptr

指向类的非静态数据的指针:(公有)

定义: 类型说明符 类名:: *指针名;

赋值: 指针名 = &类名::数据成员名;

定义/赋值: 类型说明符 类名:: *指针名=&类名::数据成员名 //要找到成员的地址,就要有&号

访问: 对象名.*类成员指针名 或者

对象指针名-> *类成员指针名

例如: int Test::*vprt = &Test::value; // 声明和初始化vPtr为Test类int型数据成员的指针

( *prt).*vptr //( *prt)是对象指针名的另一个用法

指向类的非静态函数的指针:(公有)

定义: 类型说明符 (类名:: *指针名) (参数);

赋值: 指针名 = &类名::函数成员名;

定义/赋值: 类型说明符 (类名:: *指针名) (参数) = &类名:: 函数成员名 //注意与上面的对比. 类的

非靜态成员函数编译器是需要重新改写的,以加入对this的支持也

就是说你看到的函数原型非不是最终的函数原型,所以它的指针就

还有另外一个特性,即它所属的类。但是类的静态成员就不同,它

没有this, 和普通函数一样

访问: (对象名.类成员指针名)(参数表) 或者

(对象指针名-> *类成员指针名)(参数表)

例如: int ( Point:: *p_GetX) () = &Point::GetX();

(A. *p_Getx) ()

(p1-> *p_GetX) ();

指向类的静态数据的指针:

定义/赋值: 类型说明符 *指针名=&类名:静态数据成员名 //与非静态成员相比,少了类名.有没有

这种静态的指针都无所谓,因为它就是个

普通类型的指针

访问: *指针名

例如: int *count = &Point::countP;

*count

指向类的静态函数的指针:

定义及赋值:类型说明符 (*指针名)(参数)=&类名::函数名 //静态类成员函数的指针是普通类型指针

访问: 指针名(参数)

例如: void (*gptr)() =& Point::GetC;

gptr();

更多相关推荐:
极限定义的总结

极限定义的总结极限主要包括两个方面即自变量的变化趋势和函数的变化趋势我们就这两个变化趋势来总结极限的定义自变量变化趋势limfx函数的变化趋势自变量的变化趋势主要有六种xxxxx0xx0xx0函数的变化趋势主要...

C语言中有关定义的总结

C语言中有关定义的总结1.标识符的定义以及命名规则定义:用来标识变量,常量,函数等的字符序列命名:只能由字母,数字,下划线组成,且第一个字母必须是字母或下划线。2.逗号运算符及表达式【表达式1,表达式2,??表…

定义总结

1晶体:具有格子构造的固体。非晶质体:内部质点不作规则排列(不具格子构造),无一定的外观形态。2.对称中心:假想点,在通过此点的任意直线上,距离该点等距离的两端必有相同的部分。对称轴:通过晶体中心的一根假象直线…

软件定义网络的总结

什么是OpenflowOpenFlow交换机将原来完全由交换机/路由器控制的报文转发过程转化为由OpenFlow交换机(OpenFlowSwitch)和控制服务器(Controller)来共同完成,从而实现了快…

财经总结定义

会计:会计是以货币为主要计量单位,对企事业、机关单位或其他经济组织的经济活动进行连续、系统、全面地反映和监督的一项经济管理活动。它也是一项经济管理工作。会计目标:会计目标就是对会计自身所提供经济信息的内容、种类…

高中物理中的定义式与决定式总结

1力学定义式xx2x1vx2rtTavtkFxFfFNFmamFapFSF浮FNf1Tt2TWEPWtW有WAxmnsinisinrIpev2v1v10v202电磁学高中物理中的定义式与决定式总结决定式xvtv...

集合的定义及其表示知识点总结及练习

11集合的含义及其表示学习目标1通过实例了解集合的含义理解元素与集合之间的关系并记住几种常见数集的表示2理解并掌握用列举法和描述法表示集合的方法理解集合相等的概念3了解集合的分类重点难点元素与集合之间的关系和集...

函数的定义域和值域知识点总结

函数定义域的几种求法一已知复杂函数求fx例1若函数fx1的定义域是23求fx的定义域例2总结二已知简单函数fx求复杂函数例1若函数fx的定义域为14求函数fx2的定义域总结三综合一和二求函数的定义域例1若函数f...

函数的概念及定义域、值域基本知识点总结

函数的概念及定义域值域基本知识点总结定义域定义对应法则值域映射函数性质奇偶性对数的性质单调性周期性对数反函数互为反函数的函数图像关系对数函数对数函数的图像和性质对数恒等式和不等式常用对数自然对数区间一元二次函数...

小学数学定义公式定理总结

小学数学定义定理公式总结体积和表面积三角形的面积底高2公式Sah2正方形的面积边长边长公式Sa2长方形的面积长宽公式Sab平行四边形的面积底高公式Sah梯形的面积上底下底高2公式Sabh2内角和三角形的内角和1...

初中数学概念及定义总结

初中数学概念及定义总结三角形三条边的关系定理三角形两边的和大于第三边推论三角形两边的差小于第三边三角形内角和三角形内角和定理三角形三个内角的和等于180推论1直角三角形的两个锐角互余推论2三角形的一个外角等于和...

考研高数精华知识点总结:函数的定义

凯程考研集训营为学生引路为学员服务考研高数精华知识点总结函数的定义以下为大家整理分享考研高数精华知识点总结之函数的定义凯程考研将第一时间满足莘莘学子对考研信息的需求并及时进行权威发布敬请关注1定义传统如果在某变...

总结的定义(27篇)