C++类和对象(一)

day01

2023年3月5日

知识点1.类的封装特性

1、使用结构体和函数,会造成数据和函数独立,容易造成函数调用错误的数据

//结构体,人
typedef struct{
    char name[32];
    int age;
}Person;
//结构体,狗
typedef struct{
    char name[32];
    int age;
}Dog;
void PersonEat(Person *p)
{
    cout << p->name << "正在吃饭"<< endl;
}
void DogEat(Dog *d)
{
    cout << d->name << "正在吃狗粮"<< endl;
}
void test01()
{
    Person person ={"张三", 20};
    Dog dog = {"旺财", 3};
    PersonEat(&person);
    DogEat(&dog);
    //数据和方法独立,容易造成方法调用错误数据
    DogEat((Dog *)&person);
}

2、封装特性:①把变量(属性)和函数(方法,操作)合成一个整体,封装在类中;

②对变量和方法进行访问权限控制。

3、访问权限(public、prinvate、protected):

①在类的内部,没有访问权限之分,所有成员可以互相访问;

②在类的外部,访问权限才有意义,只有public修饰的成员才能被访问,在没有涉及继承和派生时,private和protected是同等级的,外部不允许访问;

访问属性

属性

对象内部

对象外部

public

公有

可访问

可访问

protected

保护

可访问

不可访问

private

私有

可访问

不可访问

知识点2.类的初始

1、语法:

//抽象的概念,系统不会为其分配空间
class 类名{ 
private://私有,类的外部不可直接访问   
protected://保护,类的外部不可直接访问
    数据
public://公有,类的外部可直接访问
    方法
    //在类的内部没有权限之分,都可以相互访问
};

2、举例

class Person{
protected:
    int age;
private:
    int my_money;
public:
    char name[32] = "lucy";
    void func()
    {
        my_money = 100;
        cout << "hello 你好!我有"<<my_money <<"万" <<endl;
    }
};
void test02()
{
    Person person;
    cout << person.name << "说:";
    person.func();
    //person.age;//err,类的外部不允许访问
    //person.my_money;//err,类的外部不允许访问
}

class默认访问权限为private;struct默认访问权限为public。

知识点3.Person类的设计

#include <cstring>
class Person{
private:
    char my_name[32];
    int my_age;
public:
    //初始化函数
    void initPerson(char *name, int age)
    {
        strcpy(my_name,name);
        my_age = age;
    }
    //对my_name进行写操作
    void setName(char *name)
    {
        strcpy(my_name,name);
    }
    //对my_name进行读操作
    char* getName()
    {
        return my_name;
    }
    //对my_age进行写操作
    void setAge(int age)
    {
        if(age > 0 && age <100)
            my_age = age;
        else
            cout << "年龄无效!" <<endl;
    }
    //对my_age进行读操作
    int getAge()
    {
        return my_age;
    }
    //遍历Person的信息
    void showPerson()
    {
        cout << "姓名:" <<my_name <<" 年龄:" << my_age << endl;
    }
};
 
void test03()
{
    //定义一个对象lucy,对象只能借助公有方法操作私有数据
    Person lucy;
    //初始化
    lucy.initPerson("lucy", 20);
    //获取姓名
    cout << "姓名:" <<lucy.getName()<< endl;
    //获取年龄
    cout << "年龄:"<< lucy.getAge() << endl;
    //更改年龄
    lucy.setAge(123);//大于100,无效
    lucy.setAge(23);
    //遍历lucy的信息
    lucy.showPerson();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值