zoukankan      html  css  js  c++  java
  • 学习:类和对象——封装

    C++面向对象的三大特性为:封装继承多态

    例如:人属于人类,车属于车类....


    封装的意义:

    封装是C++面向对象三大特性之一

    封装的意义一:

    1、将属性和行为作为一个整体,表现生活中的事物
    2、将属性和行为加以权限控制

    语法: class 类名{ 访问权限: 属性 / 行为 };

    示例1:设计一个圆类,求圆的周长

    #include<iostream>
    
    
    using namespace std;
    
    const double PI = 3.14;
    class Circle {
    
    public:
    	int r;
    
    	double calcuate() {
    		return 2 * r * PI;
    	}
    
    };
    
    int main() {
    	
    	Circle c1;
    	c1.r = 5;
    	cout << c1.calcuate() << endl;
    	system("pause");
    	return 0;
    }
    

    封装意义二:

    类在设计时,可以把属性和行为放在不同的权限下,加以控制

    访问权限有三种:

    1、public 公共权限
    2、protected 保护权限
    3、private 私有权限

    #include<iostream>
    #include<string>
    
    using namespace std;
    
    class Priv {
    private:
    	string peroson_name;
    
    protected:
    	string car_name;
    
    public:
    	string pass;
    };
    
    int main() {
    
    	Priv v1;
    	v1.pass = "123"; //由于属性的访问权限是公共的 所以可以访问
    	//v1.car_name = "123"; //由于属性的访问权限是受保护的的 所以无法访问 报错
    	//v1.person_name = "123";//由于属性的访问权限是私人的 所以无法访问 报错
    
    	system("pause");
    	return 0;
    }
    

    struct和class区别

    在C++中 struct和class唯一的区别就在于 默认的访问权限不同

    在struct中,默认访问的权限为public

    在class中,默认访问的权限为private

    #include<iostream>
    #include<string>
    
    using namespace std;
    class C1
    {
    	int  m_A; //默认是私有权限
    };
    
    struct C2
    {
    	int m_A;  //默认是公共权限
    };
    
    int main() {
    
    	C1 c1;
    	//c1.m_A = 10; //错误,访问权限是私有
    
    	C2 c2;
    	c2.m_A = 10; //正确,访问权限是公共
    
    	system("pause");
    
    	return 0;
    }
    

    成员属性设置为私有:

    优点1:将所有成员属性设置为私有,可以自己控制读写权限

    优点2:对于写权限,我们可以检测数据的有效性

    用自己的话来说:我们是程序员,那么所有的东西都应该被我们自己掌控,而不是把操作权给别人

    示例:

    #include<iostream>
    #include<string>
    
    using namespace std;
    
    class Person {
    public:
    	void set_my_age(int age) {
    		if (age < 0 || age> 100) { //传入的数据自己还可以进行相应的判断,是否为合法
    			cout << "年龄超过范围,默认设置为0" << endl;
    			this->my_age = 0;
    			return;
    		}
    		this->my_age = age;
    		cout << "年龄设置成功" << endl;
    	}
    
    	void echo_my_age() {
    		cout << "年龄为:" << this->my_age << endl;
    	}
    
    	//其他的以此类推,主要这里的学习的思想
    
    private: //成员属性都是自己能操控的
    	int my_age;
    	string my_name;
    	string my_girl;
    };
    
    int main() {
    
    	Person p1;
    	//p1.set_my_age(100);
    	p1.set_my_age(101);
    	p1.echo_my_age();
    
    
    	system("pause");
    	return 0;
    }
    
  • 相关阅读:
    腾讯大数据开发实习面经
    网易游戏2021暑期实习生 游戏运营管理面经 已拿offer
    猿辅导大数据校招1面+2面面经
    虎牙直播内容运营(英雄联盟)三轮超高质量面经分享
    字节跳动日常实习广告大数据研发实习面经(初面)
    运营小白超详细三轮面试拿到字节跳动offer
    字节跳动前端日常实习三轮技术面经
    360大数据开发实习面经
    美团大数据开发工程师校招面经
    高级运维工程师的打怪升级之路
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/11851543.html
Copyright © 2011-2022 走看看