C++类和对象初接触

类和对象

三大特征: 封装,继承,多态

封装意义一:将属性和行为(这俩统一称为行为)作为一个整体,表现生活中的事物
语法:Class类名{访问权限:属性/行为}

#include <iostream>
using namespace std;
const double PI = 3.14;

// class表示设计一个类,类后面紧跟着就是类名称
class Circle
{
    // 访问权限
public: // 公共权限
    // 属性
    int c_r; // 半径

    // 行为
    // 获取圆的周长
    double zhouchang()
    {
        return 2 * PI * c_r;
    }
};

int main()
{
    // 通过圆类 创建具体的圆(对象)
    Circle C1;
    // 给圆对象的属性进行赋值
    C1.c_r = 10;
    cout << C1.zhouchang() << "\n";

    return 0;
}

作业:显示学生的姓名和学号


// 属性: 姓名和学号
// 类:学生
// 行为:显示学生的姓名和学号
// 注意:类中的属性和行为 我们统一称为成员
#include <iostream>
#include <string>
using namespace std;

class Student
{
    // 权限
public:
    // 属性
    string m_name;
    int m_xuehao;

    // 行为
    // 这里有一点我不太懂,我需要怎么去定义这个函数的类型?
    // 用 void !!!!!
    // 显示姓名和学号
    void sS()
    {
        cout << m_name << " " << m_xuehao << "\n";
    }

    // 给姓名赋值
    void setName(string name)
    {
        m_name = name;
    }
    // 给ID赋值
    void setID(int n)
    {
        m_xuehao = n;
    }
};

int main()
{
    // 通过类实例化
    Student s1;
    // s1.m_name = "Alaso_shuang";
    // 还有一种写法就是用函数传参的方式
    s1.setName("Alaso_shuang");
    // s1.m_xuehao = 19;
    s1.setID(19);
    s1.sS();

    return 0;
}

封装意义二 放在不同的权限下


权限分类:

1.public 公共权限 (成员在类内可以访问)
2.protected 保护权限(成员在类内可以访问,但是在类外不可以访问)
3.private 私有权限(成员在类内可以访问,但是在类外不可以访问)

protected 和 private 最大的不同就是在继承方面是否可以访问

#include <iostream>
using namespace std;

// 公共权限
class Person
{
public:
    string m_name;
protected:
    string m_car;
private:
    int m_password;


public:
    void f()
    {
        m_name = "Alaso_shuang";
        m_car = "benchi";
        m_password = 123456;
    }
}; 
//你看,类内都可以访问
int main()
{
    Person p1;
    //p1. 什么的时候,它选项中只出现了 public权限 下的数据
    return 0;
}

专业术语补充:

属性 成员属性、成员变量

行为 成员函数、成员方法



注意区分

struct 和 class 区别:

struct默认权限是公共 public

class 默认权限是私有权限 private



成员属性设置为私有

#include<iostream>
#include<string>
using namespace std;

class Person
{
public:
    //设置姓名
    void setName(string name1)
    {
        n_name = name1;
    }
    //获取姓名
    string getName()
    {
        return n_name;
    }
    //获取年龄
    int get_age()
    {
        return n_age;
    }
    //设置偶像
    void idol(string ID1)
    {
        n_ID = ID1;
    }
    string idol1()
    {
        return n_ID;
    }
private:
    string n_name;
    string n_ID;
    int n_age = 18;//年龄初始化不会导致乱码
};


int main()
{
    Person p;
    p.setName("Alaso_shuang");
    p.idol("soso  wenyingqian");
    cout<<"name:"<<p.getName()<< "\n";
    cout<< "favourite actor:"<< p.idol1() <<"\n";

    return 0;
}


实战

立方体

提要点
// 创建立方体类
// 设置属性
// 获取面积和体积
// 判断两个立方体是否相同(全局判断 和 成员判断)

#include <iostream>
using namespace std;

class Cube
{
public:
    // 设置长
    void chang(int CHANG)
    {
        L = CHANG;
    }
    // 获取长
    int get_chang()
    {
        return L;
    }

    // 设置宽
    void kuan(int KUAN)
    {
        K = KUAN;
    }
    // 获取宽
    int get_K()
    {
        return K;
    }
    // 设置高
    void gao(int GAO)
    {
        G = GAO;
    }
    // 获取高
    int get_G()
    {
        return G;
    }

    // 获取面积和体积
    int mianji()
    {
        return 2 * L * K + 2 * L * G + 2 * K * G;
    }
    int tiji()
    {
        return L * K * G;
    }
    // 利用成员判断
    bool panduan2(Cube &c1) // 注意这里只需要传入一个参数,就是另外一个立方体,因为已经存在一个立方体了
    {
        if (L == c1.get_chang() && K == c1.get_K() && G == c1.get_G())
        {
            return true;
        }
        return false;
    }

private:
    int L;
    int K;
    int G;
};

// 利用全局判断 两个立方体是否相等
bool panduan(Cube &c1, Cube &c2) // 传引用就不需要拷贝一份数据
{
    if (c1.get_chang() == c2.get_chang() && c1.get_K() == c2.get_K() && c1.get_G() && c2.get_G())
    {
        return true;
    }
    return false;
}
int main()
{
    Cube c1, c2;
    c1.chang(10);
    c1.kuan(10);
    c1.gao(10);

    c2.chang(10);
    c2.kuan(10);
    c2.gao(10);
    // cout<<c1.mianji()<<"\n";
    // cout<<c1.tiji()<<"\n";
    bool res = panduan(c1, c2);
    cout << res << "\n"; // 答案是1就表明相同,答案不为1就表示不相同
    bool res2  = c1.panduan2(c2);
    cout<<res2<<"\n";
    return 0;
}


点和圆的关系

提要点:
需要正确命名,不能随心所欲

#include <iostream>
using namespace std;

// 创建一个点类
class Point
{
public:
    // 设置点的x坐标
    void set_X(int xzuobiao)
    {
        x_x = xzuobiao;
    }
    // 获取点的x坐标
    int get_X()
    {
        return x_x;
    }
    // 设置点的y坐标
    void set_Y(int yzuobiao)
    {
        y_y = yzuobiao;
    }
    // 获取点的y坐标
    int get_Y()
    {
        return y_y;
    }

private:
    int x_x;
    int y_y;
};

// 创建一个圆类
class Circle
{
public:
    // 设置半径
    void set_R(int rzuobiao)
    {
        R_p = rzuobiao;
    }
    // 获取半径
    int get_RR()
    {
        return R_p;
    }
    // 设置圆心
    void set_center(Point c)  // 修改函数名,使其更符合命名规范
    {
        yuanxin = c;
    }
    // 获取圆心
    Point get_center()  // 修改函数名,使其更符合命名规范
    {
        return yuanxin;
    }

private:
    int R_p;
    Point yuanxin; // 圆心
};

// 全局函数判断点与圆的关系
void panduanguanxi(Circle &c1, Point &dian)
{
    // 计算点到圆心的距离的平方
    int dis = (c1.get_center().get_X() - dian.get_X()) * (c1.get_center().get_X() - dian.get_X()) +
              (c1.get_center().get_Y() - dian.get_Y()) * (c1.get_center().get_Y() - dian.get_Y());
    int Rdis = c1.get_RR() * c1.get_RR();

    if (dis == Rdis)
        cout << "yuanshang" << "\n";  // 点在圆上
    else if (dis > Rdis)
        cout << "yuanwai" << "\n";   // 点在圆外
    else if (dis < Rdis)
        cout << "yuannei" << "\n";   // 点在圆内
}

int main()
{
    Circle c1;
    Point xin;  // 创建圆心点
    c1.set_R(10);   // 设置圆的半径
    xin.set_X(10);  // 设置圆心的x坐标
    xin.set_Y(10);  // 设置圆心的y坐标
    c1.set_center(xin);  // 设置圆心

    // 创建一个点
    Point p;
    p.set_X(10);  // 设置点的x坐标
    p.set_Y(15);  // 设置点的y坐标

    // 判断点与圆的关系
    panduanguanxi(c1, p);

    return 0;
}
posted @ 2025-02-07 16:27  Alaso_shuang  阅读(54)  评论(0)    收藏  举报
2 3
4