五、C++类和对象

一.类和对象的基本概念

1.任何事物都有属性,行为;例如一个学生有名字、性别、年龄等属性,吃饭睡觉等行为。C++提供了类的概念,可以将某事物的所有属性和行为封装在一个Class中

2.类对于某个事物的描述其实还是抽象的,例如人类有姓名、性别等属性,可以吃饭上班打游戏等行为,但是这只是描述的话其实我们不知道这个事物具体时什么样的,因为这个类没有告诉我们每个属性具体的值是多少,所以类只是对某一类事物的一个描述而已。实际应用中我们需要操作某类事物中一个或多个具体的事物。那么这个具体的事物我们就称之为对象

3.类是抽象的,对象是具象的。

4.对象是怎么来的呢?有类实例化而来。因此我们也说通过一个类实例化一个对象

二、类的定义

属性:变量

行为:函数/方法

class 类名
{
    访问控制符:  //public、private、protected
        成员变量 //属性
        成员函数 //行为
};

实例:定义一个类描述一个动物

class CAnimal    //类名的首字母一般大写
{
//访问控制符    
public:
    //属性
    char name[32];
    int age;
    //方法
    void cry(char *voice)  //描述动物的行为
    {
        //在成员函数中可以直接访问成员变量
        cout<<name<<voice<<endl;
    }
};

 C++类对象中的成员变量和成员函数是分开存储的

        普通成员变量:存储于对象中,于struct变量又相同的内存布局和字节对齐方式

        静态成员变量:存储于全局数据区中

        成员函数:存储于代码段中

 三、类的基本使用

class CAnimal
{
//访问控制符
public:
    //属性
    char name[32];
    int age;
    //方法
    void cry(char *voice)  //描述动物的行为
    {
        //在成员函数中可以直接访问成员变量
        cout<<name<<voice<<endl;
    }
};

int main() {
    //实例化普通对象
    CAnimal cat;
    //通过数组实例化多个对象
    //CAnimal cats[10];
    //定义指针变量
    CAnimal *p;
    p = &cat;

    cat.age =1;
    cout<<cat.age<<endl;

    p->age =2;
    cout<<cat.age<<endl;
    cout<<p->age<<endl;

    //初始化name数组
    memset(cat.name,0,sizeof (cat.name));
    strcpy(cat.name,"Tom");

    cat.cry("mi mi");

    cout<<cat.name<<endl;

    return 0;
}

四、类成员的访问控制

1、在C++中可以给成员变量和成员函数定义访问级别

·public 共有的,修饰成员变量和成员函数可以在类的内部和类的外部被访问

·private 私有的,修饰成员变量和成员函数只能在类的内部被访问

·protected 被保护的,修饰成员变量和成员函数只能在类的内部被访问

using namespace std;

class Teacher
{
public:
    char  name[20];
private:
    int _age;
    cahr _sex;
};

int main()
{
    Teacher t;
    strcpy(t.name,"Tony");

    //t._age = 30; //err,age is private

    return 0;
}

2.如何更加合适使用访问控制:通过函数操作private里的变量

using namespace std;

class Teacher
{
public:
    char  name[20];
    void set_age(int age)   //设置_age属性
    {
        _age = age; //在类的内部访问private成员变量
    }
    int get_age()
    {
        return _age;
    }
private:
    int _age;
    cahr _sex;
};

int main()
{
    Teacher t;
    strcpy(t.name,"Tony");

    t.set_age(30);            //设置age
    cout<<t.get_age()<<endl;  //得到age
    
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值