c++(3)远征之封装篇(上)

1、类和对象

(1)类的定义

class  Dog//class为关键字,Dog为类名

{

char name[20];

int age;

int type;//数据成员,int为属性

void speak();

void run();//成员函数、方法
}

(2)访问限定符

public:公共的,希望暴露

protected:受保护的

private:私有的,希望隐藏

 

class  Dog//class为关键字,Dog为类名

{

public:

char name[20];

int age;

int type;//数据成员,int为属性

void speak();

void run();//成员函数、方法

private:

狗蛋白质含量

}

2、对象实例化

(1)从栈实例化对象

class TV

{

public:

char name[20];

int type;

void changeVol();

void power();

}

int main(void)

{

TV tv;

TV tv[20];

return 0;

}

(2) 从堆实例化对象

int main(void)

{

TV *p=new TV();

TV*q=new TV[20];

//to do

delete p;

delete [ ]q;

return 0;

}

3、对象成员的访问方法

(1)int main (void)

{

TV tv;

tv.type=0;

tv.changeVol();

return 0;

}

(2)

int main (void)

{

TV *p=new TV();

p->type=0;

p->changeVol();

delete p;

p=NULL;

return 0;

}

(3)

int main (void)

{

TV *p=new TV[5];

for(int i=0;i<5;i++)

{

p[i]->type=0;

p[i]->changeVol();

}

delete [ ]p;

p=NULL;

return 0;

}

4、初始string

string s1;                s1为空串

string s2("ABC");           用字符串字面值初始化s2

string s3(s2);                    将上初始化为s2的一个副本

string s4(n,'c');                  将s4初始化为字符‘c’的n个副本

(1)常用操作

s.empty( )        若s为空串,则返回true,否则返回false

s.size( )           返回s中字符个数

s[n]                  返回s中位置为n的字符,位置从0开始

s1+s2            将两个串连接成新串,返回新生成的串

s1=s2             把s1的内容替换为 s2的副本

v1==v2           判定相等,相等返回true,否则返回false

v1!=v2           判定不等,不等返回true,否则返回false

5、数据封装

class Car

{

public:

   int getWheelCount()

{return m_iWheelCount;}

private:

int m_iWheelCount;         //只读属性,不能修改

}

6、类内定义与内联函数

(1)内联函数inline

          类内定义:函数写在类里

(2)类外定义:同文件类外定义、分文件类外定义

分文件类外定义:在.h文件中定义类函数

                                 在另一个.c文件中调用类中的函数,同时要#include".h"头文件

       Car.h                                                Car.cpp

class  Car                                          #include"Car.h"

{                                                          void Car::run( )

public:                                                        {    }

   void run( );                                       void Car::stop( )

  void stop( );                                              {    }

  void changeSpeed( );                      void Car::changeSpeed( )

}                                                                     {    }

7、内存分区

栈区:int  x=0;int *p=NILL;

堆区:int *p=new int [20];

全局区:存储全局变量及静态变量

常量区:string str="hello";

代码区:存储逻辑代码的二进制

8、对象初始化,构造函数

(1)构造函数规则和特点

构造函数在对象实例化时被自动调用

构造函数与类同名

构造函数没有返回值

可以有多个重载形式

实例化对象时仅用到一个构造函数

当用户没有定义构造函数时,编译器自动生成一个构造函数

(2)无参构造函数

(3)有参构造函数

(4)重载构造函数

9、初始化列表

class Student

{

public:

  Student()   {m_strName("Jim"),m_iAge(10);  }

private:

int m_iWheelCount;      

}

特性:

初始化列表先于构造函数执行

初始化列表只能用于构造函数

初始化列表可以同时初始化多个数据成员

10、拷贝构造函数

定义格式:类名(const 类名&变量名)

11、析构函数:~类名()不加任何参数

     作用释放资源

class Student

{

public:

  Student()   {m_strName("Jim"),m_iAge(10);  }

~Student()   {delete [ ]m_strName;  }

private:

int m_iWheelCount;      

}

如果没有自定义的析构函数则系统自动生成

析构函数在对象销毁时自动调用

析构函数没有返回值,没有参数也不能重载

*申请内存——>初始化列表——>构造函数——>参与运算——>析构函数——>释放内存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值