c++第七天(类的特性)

22 篇文章 2 订阅

一、类的内存空间

    类的空间大小计算与结构体一致,都是根据内存对齐(字节对齐)原则,每次分配都是按照结构体中数据类型最大的字节数分配,结构体大小也和顺序有关。

//类 
class  test 
{
public:
    char a;
protected:   
    short c;
private:
    int  b; 
    float d;  
}; // 12 个字节 

1、类的大小与数据成员属性无关(public,protect,private)。

2、数据成员的空间是从上往下分配的,与属性无关

3、类的大小与成员函数无关,只与数据成员有关。(函数在未调用前是不分配空间的)。

二、类成员的函数类外编写

在类外使用类内的函数时必须加上::以表示是在类内空间访问的。(类名::函数名)。而且必须为public权限才行。

//设计一个文件管理类 
class  File
{
    public: 
    File();  //声明一个构造函数 
    File(const char *file); //带参数的构造函数 
    ~File(); //声明一个析构函数 

private: 
    FILE  *fp;
};

//构造函数 
File::File()
{
    cout << "无操作文件" << endl; 
}

File::File(const char *file)
{
    this->fp = fopen(file,"r+");
    if(this->fp == NULL)
    {
        perror("");
    }else 
    {
        cout << "初始化文件成功" << endl; 
    }
}

//析构函数 
File::~File()
{
    fclose(fp);
}

三、类的组合

一个类中包含另一个类,比如一个人养了一只猫,人包含猫。相当于一个结构体包含另一个结构体。

人有:姓名,性别,年龄。

猫有:品种,颜色,年龄。

#include <iostream>
#include <string.h>

using namespace std; 

//设计猫类
class cat
{
public: 
cat(const char *Varieties="土猫",const char *color="黑色",int age=0):age(age)
{
      strcpy(this->Varieties,Varieties);
      strcpy(this->color,color);
}

//设计一个显示接口 
void show()
{
  cout << Varieties  << "  颜色:" << color << "  年龄:" << age << endl;
}

private: 
char Varieties[1024]; 
char color[20]; 
int age;
};


//设计一个人类
class  person
{
public:                                    //直接在参数列表中初始化这个猫,这样可以使用猫类
person(const char *name,const char *sex,int age,cat m):age(age),mao(m)
{
    strcpy(this->name,name);
    strcpy(this->sex,sex); 
}

//显示这个人的所有信息,包括他养的猫 
void show()
{
    cout << "姓名" << name <<endl; 
    cout << "性别" << sex <<endl; 
    cout << "年龄" << age <<endl; 

    cout << "宠物:";
    //显示宠物信息
    mao.show(); 
}
private: 
char name[1024]; 
char sex[10]; 
int  age;
//人养了一只猫
cat mao;   //私有成员定义一个猫类
};

int main()
{
    
    //定义一只猫 
    cat mao("加菲猫","橘黄色",3);

    //定义一个人对象 
    person  xm("小明","男",18,mao);  //直接将猫类对象传递到构造函数中初始化
    xm.show(); 

}

重点:如何在类与类中相互调用数据?

可以在主函数中获取另一个类的对象作为自己的参数进行传递,但要在私有成员里先声明该类才能初始化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值