首页 > 编程语言 >C++ 基础语法5(封装、访问权限)

C++ 基础语法5(封装、访问权限)

时间:2023-01-20 18:00:12浏览次数:53  
标签:return cout int void C++ 封装 c1 权限


#include<iostream>
using namespace std;//标注空间
#include<string>
#include<time.h>
#include<cstdlib>

//C++当中面向对象三大特性:封装、继承、多态
//C++当中万事万物都能作为对象!作为对象有- 属性

//封装:意义-----一:将属性和行为作为一个整体来表现生活当中的事物;二:将属性和行为加以权限控制

//一:语法 class 类名 {访问权限:属性/行为}; ---(类当中的属性和行为统一称为: 成员!!!!!
//属性-----成员属性/成员变量!!!!!
//行为-----成员函数/成员方法!!!!!

// 设计一个圆类 求圆的周长!(公式:2*π*r)(r半径是可以作为圆的一个 属性)

//const double PI = 3.14;//π=PI=3.14设计一个常量
//
//class Circle //设计一个类 class 类名
//{
// //访问权限!!!!!
//public: //公共服务权限
//
// //圆的属性(属性通常是一些变量)!!!!!
// int m_r;//半径
//
// //圆的行为(比如这个是:获取圆的周长)(行为通常用函数来获取)!!!!!
// double Circlezhouchang()
// {
// return 2 * PI*m_r;//返回周长通常作为一个行为 !行为通常用函数作为一个表达!
// }
//
//};
//int main()
//{
// //通过所创建的类 来创建具体的对象 -通过创建的圆类 来创建具体的圆(对象) 这个通过类来创建对象叫-实例化!!!!!
// Circle c1;//类名 对象名; 创建对象
//
// //给圆 对象 属性来进行具体的赋值操作!
// c1.m_r = 10;//对象名.属性=所赋的值;
//
// cout << "圆的周长为: " << c1.Circlezhouchang() << endl;//对象名.行为函数() 即获取行为
//
// system("pause");
// return 0;
//}

//设计一个学生类:属性有姓名、学号;可以给姓名学号赋值,可以显示姓名、学号

//class Student
//{
// //访问权限
//public:
// //属性
// string m_Name; //姓名
// int m_ID; //学号
//
// //行为
// void showStudent()//显示姓名和学号
// {
// cout << " 该学生的姓名是 : " << m_Name << " 该学生的学号是 : " << m_ID << endl;
// }
//
// //!!!!!还可以通过行为来给属性进行一个赋值操作!!!!!
// void setName(string name)
// {
// m_Name = name;//传入函数然后直接把传入的值赋值给属性!!!!!
// }
// void setID(int id)
// {
// m_ID = id;
// }
//};
//int main()
//{
// //创建一个具体的学生 对象 -实例化
// Student s1;
// s1.m_Name = "张三";
// s1.m_ID = 01;
// //显示学生信息
// s1.showStudent();//相当于调用函数!显示信息
//
// Student s2;
// s2.m_Name = "理事";
// s2.m_ID = 02;
// s2.showStudent();
//
// Student s3;
// s3.setName("王五");//调用函数然后传入数值给与属性赋值!!!!!通过行为给属性进行赋值操作!!!!!
// s3.m_ID = 03;
// s3.showStudent();
//
// Student s4;
// s4.setName("赵六");
// s4.setID(04);
// s4.showStudent();
//
// system("pause");
// return 0;
//}


//二: 访问权限 在设计类时常常会把属性和行为放在不同的权限下进行控制和管理:public- 公共权限 ;protected- 保护权限 ;private- 私有权限;
//public 公共权限 成员 类内(在类里面{})可以访问 类外可以访问
//protested 保护权限 成员 类内可以访问 类外不可以访问-继承当中父子子类可以访问父类
//private 私有权限 成员 类内可以访问 类外不可以访问-子类不能访问父类内容

//class Person
//{
// //公共权限
//public:
// string m_Name;
// //保护权限
//protected:
// string m_Car;
// //私有权限
//private:
// int m_password;
//
//public:
// void func()
// {//在类里面可以访问:
// m_Name = "张三";
// m_Car = "大众";
// m_password = 1111111;
// }
//
//};
//int main()
//{
// //在类外
// //实例化具体对象出来
// Person p1;
// p1.m_Name = "王五";
// //p1.m_Car = "大奔";//报错:保护权限在类外是不能被访问的!!!!!
// //p1.m_password = 123456789;//报错同上
// system("pause");
// return 0;
//}


//struct 和 class:默认访问的权限不同 :calss:默认私有(private) struct:默认共有(public)

//class C1
//{
// int m_A;//默认权限 私有
//
//};
//struct C2
//{
// int m_B;//默认权限 共有
//};
//int main()
//{
// C1 c1;
// //c1.m_A = 100;//报错 私有是不能访问的
// C2 c2;
// c2.m_B = 100;//共有权限是可以访问的
// system("pause");
// return 0;
//}


//将成员属性设置为 私有(可以控制写读权限;对于写程序可以检测数据的有效性)

//class Person
//{
//public:
// //写(设置)姓名
// void setName(string name)//对 外提供一个成员函数来进行赋值操作!!!!!
// {
// m_Name = name;//只有在类的内部才能进行赋值操作!!!!!
// }
// //读(获取)姓名
// string getName()
// {
// return m_Name;
// }
//
// //获取年龄-可读可写 想修改(年龄范围0~120)
// int getAge()
// {
// m_Age = 10;//初始化赋值为10岁
// return m_Age;
// }
// //设置年龄
// void setAge(int age)
// {
// if (age < 0 || age>120)
// {
// cout << "显示错误"<<endl;
// return;
// }
// m_Age = age;
// }
//
// //只写 设置爱人
// void setLove(string lover)
// {
// m_Lover = lover;
// }
//
//private://通常把属性设置为私有会对外再设置public接口来对属性进行读写操作
// string m_Name;//姓名-可读可写
// int m_Age;//年龄-只读
// string m_Lover;//爱人-只写
//};
//
//int main()
//{
// Person p;
// p.setName("张三");//相当于通过函数来赋值
// cout << " 姓名是: " << p.getName() << endl;//读姓名
// p.setAge(50);
// cout << " 年龄是: " << p.getAge()<<endl;
// p.setLove("王五");
//
// system("pause");
// return 0;
//}


//案例一:设计立方体类(Cube) ;求出立方体面积和体积 ;分别用全局函数和成员函数判断两个立方体是否相等

//class Cube
//{
//private:
// //属性-尽量设置为私有!
// //长
// int m_L;
// //宽
// int m_W;
// //高
// int m_H;
//public:
// //行为
// //设置获取长宽高
//
// void setL(int l)//设置长
// {
// m_L = l;
// }
// int getL()//获取长
// {
// return m_L;
// }
//
// void setW(int w)//设置宽
// {
// m_W = w;
// }
// int getW()//获取宽
// {
// return m_W;
// }
//
// void setH(int h)//设置高
// {
// m_H = h;
// }
// int getH()//获取高
// {
// return m_H;
// }
//
// //获取面积
// int calculateS()
// {
// return 2 * m_L*m_W + 2 * m_W*m_H + 2 * m_L*m_H;
// }
// //获取体积
// int calculateV()
// {
// return m_L*m_W*m_H;
// }
//
////利用成员函数判断两个立方体是否是相等的!
// bool isSamebyclass(Cube c)//判断自身的立方体和传入的立方体之间是否相等 在类内可以之间访问私有层
// {
// if (m_L == c.getL() && m_W == c.getW() && m_H == c.getH())
// {
// return true;
// }
// else
// {
// return false;
// }
// }
//};
//
////利用全局函数判断两个立方体是否相等
//bool isSame(Cube &c1,Cube &c2)//引用传递!
//{
// if (c1.getL() == c2.getL() && c1.getW() == c2.getW() && c1.getH() == c2.getH())
// {
// return true;
// }
// else
// {
// return false;
// }
//
//}
//int main()
//{
// Cube c1;//创建立方体c1
// c1.setL(10);
// c1.setW(10);
// c1.setH(10);
//
// cout << "c1的面积为: " << c1.calculateS() << endl;
// cout << "c1的体积为: " << c1.calculateV() << endl;
//
// Cube c2;//创建立方体c2
// c2.setL(10);
// c2.setW(10);
// c2.setH(10);
//
// cout << "c2的面积为: " << c1.calculateS() << endl;
// cout << "c2的体积为: " << c1.calculateV() << endl;
//
// //函数判断是否相等
// bool ret = isSame(c1, c2);//引用传递!
// if (ret)
// {
// cout << "c1和c2 是!相等的两个立方体!-ret1判断" << endl;
// }
// else
// {
// cout << "c1和c2 不是!相等的两个立方体!-ret1判断" << endl;
// }
//
// //利用成员函数判断是否相等两个立方体
// int ret2 = c1.isSamebyclass(c2);
// if (ret2)
// {
// cout << "c1和c2 是!相等的两个立方体!-ret2判断" << endl;
// }
// else
// {
// cout << "c1和c2 不是!相等的两个立方体!-ret2判断" << endl;
// }
//
// system("pause");
// return 0;
//}


//案例二:设计一个圆类(Circle)和一个点类(Point) 计算点和圆之间的关系(圆心、圆内、圆上、圆外)(点到圆心的距离与半径相比较)

//距离公式:点到点之间的距离
class Point

{

public:

//设置x坐标

void setX(int x)

{

m_X = x;

}

//获取x坐标

int getX()

{

return m_X;

}

//设置y坐标

void setY(int y)

{

m_Y = y;

}

//获取y坐标

int getY()

{

return m_Y;

}

private:

int m_X;//x坐标

int m_Y;//y坐标

};class Circle

{

public:

//设置半径

void setR(int r)

{

m_R = r;

};

//获取半径

int getR()

{

return m_R;

};

//设置圆心

void setCenter(Point center)//传入的是一个点!所以是Point类

{

m_Center = center;

};

//获取圆心

Point getCenter()//返回Point类!!!!!

{

return m_Center;

};private:

int m_R;

Point m_Center;//圆心(因为是一个点 所以用点类)---在类当中可以让别的类成为本来类的核心成员!!!!!

};//判断点和圆的关系函数

void isInCircle(Circle &c,Point &p)//需要传入一个圆 和一个 点 用引用!!!!!

{

//计算两点之间距离的^2

int dsitance = (c.getCenter().getX() - p.getX())(c.getCenter().getX() - p.getX()) + (c.getCenter().getY() - p.getY())(c.getCenter().getY() - p.getY());

//(x1-x2)2+(y1-y2)2

//计算m_R^2

int rDistance = c.getR()*c.getR();

//判断关系

if (dsitance == rDistance)

{

cout << "点在圆上!" << endl;

}

else if (dsitance > rDistance)

{

cout << "点在圆外!" << endl;

}

else

{

cout << "点在圆内!" << endl;

}

}

int main()

{

//创建圆

Circle c1;

c1.setR(1);

Point center;//设置圆心坐标!

center.setX(1);

center.setY(1);

c1.setCenter(center);//放入圆心!
//创建点
Point p1;
p1.setX(1);
p1.setY(1);

//判断关系
isInCircle(c1, p1);

system("pause");
return 0;}


标签:return,cout,int,void,C++,封装,c1,权限
From: https://blog.51cto.com/u_15826146/6020738

相关文章

  • c++中内存分类
    局部变量,存储位置:栈,存储时间:变量所在程序运行时间全局变量,存储位置:静态存储区,存储时间:程序运行时间static静态变量,存储位置:静态数据区,存储时间:第一次初始化到程序运行结......
  • C++基础
    I/Ocout保留有效数字问题C++中cout默认保留六位有效数字,并且进行四舍五入修改保留数的方法cout.precision(2);//用这个来改变默认保留几位小数cout<<"保留两位有效:......
  • python/c++ 混合编程
    官方简介pybind11isalightweightheader-onlylibrarythatexposesC++typesinPythonandviceversa,mainlytocreatePythonbindingsofexistingC++code.......
  • C++获取含有中文字符的string长度
    :前言造车轮的时候要用到中文字符串的长度辨别,发现char的识别不准,进行了一番研究。>开始研究在Windows下,中文字符在C++中的内存占用为2字节,此时采用字符串长度获取函......
  • Windows下udp广播【C++】
     最近学习了下Windows下的Socket使用,在这里记录一下。 前置准备 在使用api前,需要做一些必要的准备。头文件包含  //包括Winsock2头文件使用WinsockAPI,......
  • C++ 类中定义成员类型名
    C++可以在类中给某个类型定义一个只属于该类的成员类型名,使得可以通过类名::成员类型名来访问该类型这在我使用C#过程中是从来没有遇到过的,最开始遇到的时候真的很懵逼如......
  • C++缺省源
    C++竞赛使用缺省源(初稿)点击查看代码/* Author:Sean_xzx RightOutput!&Accepted!本题核心:1.本题步骤:1.*/#include<bits/stdc++.h>#definefz(i,a,b)fo......
  • 一个C#将字节流通过管道传输到C++的问题
    提问: 提问一个C#将字节流通过管道传输到C++的问题现有一个字节流数据需要通过管道传输到C++,目前使用的方法是转成string通过WriteLine写入管道中,在C++中通过ReadFile读取......
  • mongodb权限配置
    1、mongodb的mongo.conf文件启动参数(1)./mongod--port=27017--host=127.0.0.1--dbpath=db--logpath=27017.log--fork=truehttps://blog.csdn.net/GY325416/article/......
  • Android 13(API 33)读写SD卡权限的调整适配
    在Android13前读取SDcard的内容只需要一个权限:android.permission.READ_EXTERNAL_STORAGE 但是在Android13以后这个权限被细化成了三个:publicstaticfi......