首页 > 编程语言 >(持续更新)c++中的继承、封装、多态

(持续更新)c++中的继承、封装、多态

时间:2024-03-06 16:45:13浏览次数:29  
标签:属性 封装 string 多态 c++ 权限 class name

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

c++认为万事万物都皆为对象,对象上有其属性和行为

例如:

  人可以作为对象,属性有姓名、年龄、身高、体重…,行为有走、跑、跳、吃饭、唱歌⋯

  车也可以作为对象,属性有轮胎、方向盘、车灯…行为有载人、放音乐、放空调…

  具有相同性质的对象,我们可以抽象称为类,人属于人类,车厲于车类

 

1.封装

1.1封装的意义

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

封装的意义:

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

封装意义一:

在设计类的时候,属性和行为写在一起,表现事物

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

实例代码:

#include <iostream>

using namespace std;

const double PI = 3.14;

class Circle {
public:
    int m_r;

    double calculate_ZC() {
        return 2 * PI * m_r;
    }
};

int main() {
    //实例化:通过一个类,创建一个对象的过程
    Circle c1;
    c1.m_r = 10;
    cout << "圆的周长为:" << c1.calculate_ZC() << endl;
    return 0;
}

 

封装意义二:

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

访问权限有三种:

(1)public 公共权限

(2)protected 保护权限

(3)private 私有权限

实例代码:

#include <iostream>
#include <string>

using namespace std;

class Student {
    //属性
public:
    string m_name;
    int m_age;
    //行为
public:
    void setName(string name) {
        m_name = name;
    }

    void setAge(int age) {
        m_age = age;
    }

    void showStu() {
        cout << "学生姓名:" << m_name << endl << "学生年龄:" << m_age << endl;
    }
};

int main() {
    Student s1;
    s1.setName("张三");
    s1.setAge(18);
    s1.showStu();
}

 

1.2struct和class的区别

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

区别:

  • struct默认权限为公共
  • class默认权限为私有

 

1.3成员属性设置为私有

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

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

实例代码:

#include<iostream>
#include<string>

using namespace std;

class Person {
private:
    string m_name; //姓名 可读可写
    int m_age = 18; //年龄 只读
    string m_addr; //地址 只写

public:
    void setName(string name) {
        m_name = name;
    }

    string getName() {
        return m_name;
    }

    int getAge() {
        return m_age;
    }

    void setAddr(string addr) {
        m_addr = addr;
    }

private:
    void showStu() {
        cout << "姓名:" << m_name << "年龄:" << m_age << endl;
    }
};

int main() {
    Person p1;
    p1.setName("张三");
    cout << "姓名:" << p1.getName() << endl;
    cout << "年龄:" << p1.getAge() << endl;
}

 

标签:属性,封装,string,多态,c++,权限,class,name
From: https://www.cnblogs.com/eisenshu/p/18056876

相关文章

  • Golang(Go语言)字符串转时间格式封装以及填坑
    先看代码:packagemainimport( "fmt" "time")funcmain(){ timeStr:="2021-05-2100:00:00" utcTime,_:=time.Parse(time.DateTime,timeStr) fmt.Println(utcTime)fmt.Println(utcTime.Local())}执行结果:从这里可以看出,字符串转换为时......
  • 【c++八股】手撕单例模式
    懒汉模式classSingleton{public:staticSingleton&Instance(){if(instance_==nullptr)instance_=newSingleton();}returninstance_;}private:Singleton(){}~Singleton(){} //防拷贝 Singleton(c......
  • C++的4种强制类型
    C++提供了4种强制类型转换的语法:静态转换(static_cast)static_cast是用于在没有二义性的前提下进行基本数据类型转换的一种转换方式。它只能用于具有相关性的数据类型之间的转换,如将int类型转换为double类型。如果进行无关的数据类型之间的转换,编译器将报错。用途:通常用......
  • C++ (3)
    3.函数1)函数声明中可以不写形参名而只写形参类型,这种函数声明成为函数原型。函数声明的位置可以在调用函数所在的函数中,也可以在函数之外。2)内置函数:编译时将所调用函数的代码直接嵌入到主调函数中,这种嵌入到主调函数中的函数称为内置函数(inlinefunction)。3)函数的重......
  • 店小密芒果店长商品搬家API接口PHP Java C++
    随着电子商务的迅猛发展,淘宝作为中国最大的电商平台之一,拥有着海量的商品数据和用户行为数据。为了更好地整合资源、提高运营效率,淘宝开放了商品详情API数据接口,为商家和第三方开发者提供了丰富的功能与应用。一、淘宝商品详情API数据接口概述淘宝商品详情API数据接口是淘宝开放......
  • C++ Qt开发:运用QThread多线程组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QThread组件实现多线程功能。多线程技术在程序开发中尤为常用,Qt框架中提供了QThread库来......
  • 01_C++基本数据类型_算数类型
    1.算数类型算数类型主要分为两类——整型和浮点型带符号和无符号类型带符号:int、short、long和longlong,通过在这些类型名前添加unsigned可以得到无符号类型。 选择符号的准则:(1)数值不可能为负时,选择无符号类型。(2)使用int执行整数运算。(3)算数表达式不要使用char或bool,存放字......
  • 【C++】判断一颗二叉树是否对称
    四步法:(1)如果两个子树都为空指针,则它们相等或对称(2)如果两个子树只有一个为空指针,则它们不相等或不对称(3)如果两个子树根节点的值不相等,则它们不相等或不对称(4)根据相等或对称要求,进行递归处理。//四步法判断一颗二叉树是否对称//主函数boolisSymmetric(TreeNode*root){......
  • 【C++】二叉树的前序、中序、后序遍历(递归、非递归)
    #include<vector>#include<iostream>#include<string>usingnamespacestd;//二叉树的定义structTreeNode{intval;TreeNode*left;TreeNode*right;TreeNode(inta):val(a),left(NULL),right(NULL){}};//使用递归进行前序遍历voidpreoder(Tr......
  • 【C++】求二叉树的最大深度和最小深度
    //求一颗二叉树的最大深度求高度:后序遍历求深度:前序遍历intmaxDepth(TreeNode*root){returnroot?1+max(maxDepth(root->left),maxDepth(root->right)):0;}//求一颗二叉树的最小深度(实质上是后序遍历)intminDepth(TreeNode*root){if(!root)retur......