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;
}
本文来自博客园,作者:Alaso_shuang,转载请注明原文链接:https://www.cnblogs.com/Alaso687/p/18702833

浙公网安备 33010602011771号