面向对象之封装

内容

class 类名{
1.构造函数(构造函数生成对象)
类型:(a.默认构造无参 b.普通构造自己定义的有参 c.拷贝构造 参为另一个对象 引用)
特点:(无返回值)(函数名与类名相同)
2.析构函数~(无参)(在销毁对象时调用的函数 释放内存资源)
3. public private(只能在类的内部函数调用 mian不能调用)
4.数据成员
5.成员函数工具函数 get读 set写 获取private类型的数据 因为在类外不能用private数据 所以在类外调用工具函数用private)(行为函数
}
指针比较是否相等不能直接用==(因为是浅拷贝 拷贝的只是地址)要进行运算符重载(深拷贝)
在这里插入图片描述

一个示例

#include <iostream>
using namespace std;

class Person {
public://构造函数
         Person() { //默认构造函数
             m_name = new char[1];
             *m_name = '\0';
             m_age = 0;
             m_sex = 'M';
             m_height = 0.0f;
             m_weight = 0.0f;
             cout << "Person() called " <<m_name << endl;
         };
         Person(const char* name, int age, char sex, float height, float weight);//普通构造函数
         Person( Person &p) {//拷贝构造函数//const Person &p
              m_name = new char[strlen(p.m_name)+1];
              strcpy_s(m_name, strlen(p.m_name) + 1,p.m_name);
              m_age = p.m_age;
              m_sex = p.m_sex;
              m_height = p.m_height;
              m_weight = p.m_weight;
              cout << "Person( Person &p) called " << m_name << endl;
         }
         ~Person(){//析构函数
             cout << "~person called "<<m_name<<endl;
         }
public://工具函数
    char* getname() {
        return m_name;
    }
    void setname(char *name) {
        if (name == NULL) {
            m_name = new char[1];
            *m_name = '\0';
        }
        else {
            m_name = new char[strlen(name)+1];
            strcpy_s(m_name, strlen(name) + 1,name);
        }
    }
public://操作运算符重载
    bool operator <(Person &p) {
        //年龄为标准
        return m_age < p.m_age;
    }
    bool operator ==(Person &p) {
        //年龄和姓名
        return m_age == p.m_age && strcmp(m_name,p.m_name) == 0;
    }
    void operator =(Person &p) {
        if (m_name) {
            delete[]m_name;
        }
        //深拷贝
        m_name = new char[(strlen(p.m_name)+1)];
        strcpy_s(m_name,strlen(p.m_name) + 1,p.m_name);
        m_age = p.m_age;
        m_height = p.m_height;
        m_sex = p.m_sex;
        m_weight = p.m_weight;
        cout << "operator =(Person &p) " << m_name << endl;
    }
private://数据成员
         char *m_name;
         int m_age;
         char m_sex;
         float m_height;
         float m_weight;
public://行为
    void eat() {
        cout <<m_name<< " is eating!!!" << endl;
    }
    bool ishealth() {
        float bmi = m_weight / (m_height*m_height);
        return bmi <= 25.0f && bmi >= 20.0f;
    }
};


Person::Person(const char* name, int age, char sex, float height, float weight) {
    m_name = new char[strlen(name)+1];
    strcpy_s(m_name, strlen(name) + 1,name);
    m_age = age;
    m_sex = sex;
    m_height = height;
    m_weight = weight;
    cout << "Person(char* name, int age, char sex, float height, float weight) called " << m_name << endl;
}
int main()
{
     Person a;
     Person b("asd",13,'M',1.82,60.1);
     Person c("vrt", 20, 'W', 1.62, 49.0);
     Person d = c;
     a = b;
     if (c.ishealth()) {
         c.eat();
     }
     else 
         cout << "no eating !!!" << endl;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值