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的主要内容,如果未能解决你的问题,请参考以下文章