C++ 面向对象学习 ---Day2

Posted Shawn学习日记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 面向对象学习 ---Day2相关的知识,希望对你有一定的参考价值。

面向对象主要有三大特性:封装、继承、多态

今天主要介绍下C++  面向对象编程三大特性之一的封装。

封装

定义
  • 指隐藏对象的属性和实现细节,仅对外提供公共访问方式。例如,电脑可以作为一个对象,属性有CPU、内存、显卡等,行为有写代码、玩游戏等,将这些属性和行为进行封装,只留特定的接口给外部调用,外部无需关注内部的实现细节。

意义
  • 将属性和行为作为一个整体,表现生活中的事物

示例:设计一个电脑对象

#include<iostream>
using namespace std;

class Computer{
public:
string CPU = "Inter";
   string Memory = "16G";
   string Graphics = "GTX";
   void coding()
  {
       cout<<"写代码"<<endl;
  }
   
   void play_game()
  {
       cout<<"玩游戏"<<endl;
  }  
};

int main()
{
   // 实例化一个对象
   Computer c;

   // 调用属性
   cout<<"CPU 为:"<< c.CPU<<endl;
   cout<<"内存 为:"<< c.Memory<<endl;
   cout<<"显卡 为:"<<c.Graphics<<endl;

   //调用方法
   c.coding();
   c.play_game();

   return 0;
}

输出:

CPU 为:Inter
内存 为:16G
显卡 为:GTX
写代码
玩游戏
  • 设计类时,可以给类属性、方法添加不同的访问权限,C++中有public、private、protected三种访问权限。

    • public:类外类内都可以进行访问

    • private:类外无法访问,类内可以访问,继承子类无法访问

    • protected:类外无法访问,类内可以访问,继承子类可以访问

例子:

#include<iostream>
using namespace std;

class Father{
   // 姓名,大家都可以知道
public:
string name = "xiaoming";
   // 房子,外部不可访问,但是子类继承可以访问
protected:
   string house = "汤臣一品";
   // 密码,只有自己内部可以访问
private:
   string password = "123456";
};

class Sun:public Father{
   void show()
  {
       //正确 属性是公有
       cout<<"Father's name:"<<name<<endl;
       //正确 保护属性子类内可以访问
       cout<<"Father's house:"<<house<<endl;
       //错误 私有属性子类内无法访问
       cout<<"Father's password:"<<password<<endl;
  }

};

int main()
{
   Father f;

   //正确 属性是公有
   cout<<"Father's name:"<<f.name<<endl;
   //错误 属性是保护的,类外无法访问
   cout<<"Father's house:"<<f.house<<endl;
   //错误 属性是私有的,类外无法访问
   cout<<"Father's password:"<<f.password<<endl;

   return 0;
}

面试时经常会被问道,C++中 class和struct有什么区别?

区别就是:struct中默认权限为public, class中默认权限为private。

例子:

#include<iostream>
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; //正确,访问权限是公共

return 0;
}




以上是关于C++ 面向对象学习 ---Day2的主要内容,如果未能解决你的问题,请参考以下文章

C++面向对象学习,借鉴到C语言

C++学习笔记—— 基础知识预备,以及“面向对象”的C++

C++学习笔记之高级语法

C++设计模式学习笔记:面向对象设计原则

C++设计模式学习笔记:面向对象设计原则

C++的基础学习