C++类的封装

271 阅读2分钟

一、C语言下封装

 #include<stdio.h>
 #include<string.h>
 #include<stdlib.h>

 struct Person
 {
 	char m_name[64];
 	int m_age;
 };
 void Personplay(struct Person * p)
 {
  	printf("%s 在打游戏\n", p->m_name);
 }
 void test01()
 {
 	struct Person p1;
 	strcpy(p1.m_name, "LaoWang");
 	Personplay(&p1);
  }
 
  struct Dog
 {
   	char m_name[64];
   	int m_age;
  };
  void DogEat(struct Dog * d)
 {
 	printf("%s在吃狗粮\n", d->m_name);
  }
 void test02()
 {
 	struct Dog d;
 	strcpy(d.m_name, "WangCai");
 	DogEat(&d);
 	//**可以成功调用另一个类并进行访问**
 	struct Person p;  
 	strcpy(p.m_name, "LaoWang");
 	DogEat(&p);
     
 }
 int main()
 {
 void test02();
 system("pause");
 return EXIT_SUCCESS;
     
 }

C语言的封装:缺点1-c语言下没有做类型转换的检测,缺点2-将属性和行为分离。

二、C++封装

  #include<iostream>
  using namespace std;
  
  //struct Person
  class Person
  {
  public:
  char m_name[64];
  int m_age;
  void Personplay()
  {
	cout << m_name << "在打游戏" << endl;
	}
  };
  
  struct Dog
  {
  char m_name[64];
  int m_age;
  void Dogeat()
  {
	cout << m_name << "在吃狗粮" << endl;
	}
  };
  void test01()
  {
  Person p1;
  strcpy(p1.m_name, "LaoWang");
  
  Dog d1;
  strcpy(d1.m_name, "WangCai");
  
  d1.Dogeat();
  
  p1.Dogeat();  //编译器报错 Person类不可调用Dog类
  }
    
  //C++封装,将属性和行为作为一个整体,来表现生活中的事和物
  //C++下的struct和class区别:struct默认权限:public 公共权限。class默认权限:private 私有权限
  //将这些成员 加以权限控制
  //类权限:public公共权限,protected保护权限 private私有权限
  
  int main()
  {
  test01();
  return 0;
  }

C++封装:将属性和行为作为一个整体,来表现生活中的事和物,将这些成员,加以权限控制

权限:1. public 类内可以访问 类外也可以访问

  1. protected 类内可以访问 类外不可以访问(子类可以访问)

  2. private 类内可以访问 类外不可以访问(子类也不可以访问)

三、尽量将成员属性设置为私有

    #include<iostream>
    #include<string>
    using namespace std;
    
    class Person1
    {
    public:             //提供公共接口
    //设置姓名
    void setName(string name)
    {
	m_Name = name;
    }
    //获取姓名
    string getName()
    {
	return m_Name;
    }
    //获取年龄
    int getAge()
    {
	return m_Age;
    }
    //设置喜欢
    string setLove(string love)
    {
	m_Love=love;
    }
    private:
    string m_Name;//可读可写
    int m_Age=18;//只读
    string m_Love;//只写
    };
 //将成员属性设置为私有好处:自己控制属性的读写权限
 //将用户传入的数据 进行检测
 void test03()
 {
 Person1 p1;
 p1.setName("Tom");
 
 p1.setLove("Jerry");
 
 cout << "Name is:" << p1.getName() << endl;
 
 cout << "Age is:" << p1.getAge() << endl;
 
 //cout << "Love is" << p1.setLove() << endl;//不可访问 因为只有只写状态
 
 int main()
 {
 test03();
 return 0;
 }

四、extern C浅析

1)用途是C++在运行文件时候,extern C包含的内容用C语言方式连接

  #pragma once
  
  #ifdef __cplusplus   //两个下划线  + C plus plus
  extern "C" {
  #endif
  
  #include<stdio.h>
  
  void show();
  void test();
  
  #ifdef __cplusplus
  }
  #endif