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; }

__EOF__

本文作者Alaso_shuang
本文链接https://www.cnblogs.com/Alaso687/p/18702833.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Alaso_shuang  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2 3
4
点击右上角即可分享
微信分享提示