结构体的进阶——类

来源:互联网 发布:天涯明月刀cpu占用优化 编辑:程序博客网 时间:2024/06/05 02:01

--知识点1.结构体

1)结构体的声明和定义

struct 结构体名

{   数据类型1   属性变名1;

   ...

};

2)结构体的使用

main函数里:

结构体名    结构体变量名;

结构体变量名.属性变量名1=...;

结构体变量名->属性变量名2=...;

...

例如:

...

struct people

{   int age;

    char sex;

};

int main()

{ people XiaoMing;   //定义了一个小明的结构体对象,具有age和sex两种属性

  XiaoMing.age=17;  //给小明的age属性赋值

  XiaoMing->sex='m';              //调用属性的两种格式  “.”  或者  “->”

  ...}

--知识点2类的各种延伸

可以将函数放进结构体中,这样使得结构体更加面向对象化。

类比结构体更加结构严谨,尤其体现在数据的封闭性和安全性上。在定义类的成员时要加上访问标示符来表明该成员(数据或函数)能否在指定的作用域中被调用、共享。

     1)对象的构造(构造函数会在创建对象后立即执行)

·构造函数的名字必须与雷鸣相同

·构造函数没有返回值,亦不需要返回类型

·构造函数可以是一组重载函数

下面来具体说说构造函数的几种格式:

现已定义类class Complex{

private:   double real,imag;

   ...

接下来写构造函数(其他功能函数忽略):

  1)public: Complex(double r=0,double i){real=r;imag=i};   //最直接的定义  其中为real默认了初始值0

  2)public: Complex(double r,double i):real(r),imag(i);      //带初始化列表的构造函数

注意:有时候需要用一个同类的对象来初始化某个对象。这个初始化是由一个特殊的拷贝构造函数来完成的。定义一个拷贝构造函数的格式如下

类名(const  <类名> &);       例如: people (const people &p){this.x=p.x;...;}     //const   保证了传入的参数的安全性,&引用节约了空间

2)析构函数

当程序结束时会自动执行来释放对象所使用的空间

--知识点3 .友元

声明友元关系可以在保证数据安全性的前提下,让程序里的函数访问或者调用被声明为友元的类里的私有成员。

友元关系是单方关系,即声明类A是类B的友元,仅仅是A中的某些成员函数能够访问和调用类B中的所有成员(私有的都能访问了,更别说公共的),但是类B中的成员函数仅仅能访问类A中的声明为public的成员。例如

class A

{private:

int num;

 public:

...

  friend class B;  //将类B声明为类A的友元,即B类的成员函数能调用类A中的私有成员(num)

...;}

--知识点4.类的继承

考虑到对象有特殊属性和共有属性,可以在某个具有共有的基础属性的某个基类上,继承出各种具有特殊的属性的类,从而产生特殊的对象,即更加复杂的数据结构。

如果派生类只有一个基类,称作单继承。是从多个基类继承来的,称作多继承。

格式:

class 派生类名:[继承方式]  基类名  

{新增成员声明;}


 //继承方式有三种,public继承让派生类无权访问基类private成员;private让派生类无法访问基类的成员;protected让派生类可以访问基类的private成员;总的来说  就是一个(public继承)把派生类当朋友看,该给的给,不该给的不给;一个(protected)把派生类当儿子看待,可以访问私有成员;另一个(private)把派生类当外人来看,派生类无权访问基类的成员哪怕是public成员。

当创建派生类对象时,先执行基类的构造函数,在执行派生类的构造函数;析构则先执行派生类的析构函数。

0 0