栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 特性 -封装

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 特性 -封装

1.1类和对象

封装属性和行为作为整体

class typename{
      admission://public,protected,private;
      属性:
      .......
      行为函数:
      ......
};
int main(){
     typename  ....  //实例化instantiate

}

1.2封装-权限:

公共权限: public:成员类内可以访问,类外也可以访问

保护权限: protected:成员类内可以访问,类外不可以访问,儿子可以访问父亲中的保护权限内容。

私有权限 : private:成员雷内可以访问,类外不可以访问,儿子不可以访问父亲中的私有权限内容。C++类内不声明,默认权限是私有

#include
using namespace std;
#define PI 3.14
class Person{
	public:
	string name;	
    protected :
	string car;			
	private: 
	int password;	
	public:
	void init(){
	name="ULL_64";
	car="bigG";
    password=124324;	
	} 	  
};
signed main(){
    Person p1;
    p1.init();
    cout< 

1.3利用public接口实现对私有权限内容得读写操作:

成员函数设置为私有的优点

1>可以自行控制读写权限;

2>对于写可以检测数据的有效性。

#include
using namespace std;
#define PI 3.14
class Person{
public :
	setname(string s){
		name=s;
	}
	string getname(){
		return name;
	}
	int getage(){
		return age;
	}
    string getlover(){
		return lover;
	}
	void setage(int x){
        if(x<0||x>150)
       {
          cout<<"你这个老妖精!"< 

1.4对象的初始化与清理:

构造函数与析构函数

构造函数的作用:初始化;

1.没有返回值不用写void

2.函数名与类名相同

3.构造函数可以有函数,可以发生重载

4.创建对象时,构造函数会自动调用一次。

析构函数:主要作用于对象被销毁前系统自动调用,执行一些清理工作。

1.没有返回值,不写void

2.函数名和类名相同,名称前加上~

3.析构函数不含参数,不可以发生重载

4.对象销毁前自动调用一次。

#include
using namespace std;
class Person{
	public: 
	 Person(){
	 	cout<<"构造函数的调用 "< 

1.4.1构造函数的分类及其调用:

按参数:含参构造,无参构造。无参构造函数不要写括号,会被编译器认定为非类的函数。

拷贝构造函数和普通构造。

注意:匿名对象的特点,当前执行结束后就被系统释放

括号法构造

   Person p1;
   Person p2(10);
   Person p3(p2);

显示法构造:

Person p1

Person p2=Person(10)

Person p3=Person(p2);

注意:不要用拷贝函数初始化匿名对象。

隐式转化法

Person p1=10;

Person p2=p1;

拷贝构造的调用时机:

+   使用一个已经创建完毕的对象来初始化一个新对象

+  值传递的方式给函数参数传值

+  以值的方式返回局部变量

构造函数调用规则:

1.1 编译器的默认构造函数

1.默认构造函数(无参空函数体)

2.默认析构函数(无参,函数体为空)

3.默认拷贝构造函数(对属性进行值拷贝)

1.2 注意事项

1.如果创建了有参构造函数,编译器就不再提供默认无参构造函数。

2.如果创建了拷贝构造函数,编译器就不再提供任何默认构造函数。

1.4.2 深拷贝与浅拷贝:

浅拷贝:简单的赋值拷贝参数,编译器进行逐个字节拷贝的是浅拷贝。

浅拷贝带来的问题是堆区的内存被重复释放

解决办法,重新写一个拷贝构造函数。

#include
using namespace std;
class Person{
	public :
	int age;
	int *height;
	Person(){
		cout<<"默认构造函数"< 

如果属性有在堆区开辟的,一定要自己实现一个拷贝构造函数。避免程序崩溃。

深拷贝:在堆去申请空间,进行拷贝操作

1.5 初始化列表:

语法:构造函数()属性1(val1) 属性2(val2).......{}

        类内定义Person(int a,int b,int c) : m_a(a),m_b(b),m_c(c){}    
        类外调用Person p(30,20,10);

1.6类对象作为类成员

C++中类的成员可以是另一个类的对象,我们称该成员为类对象。

当其他的类的对象作为本类成员,先构造其他类的对象在构造本类成员。

析构是结论相反。

#include
using namespace std;

class Phone{
	public:
		string phonename;
		Phone(string name){
			cout<<"Phone 的构造函数"< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/853492.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号