首页 > 编程语言 >C++的三大特性 ,封装、继承、多态?(一)

C++的三大特性 ,封装、继承、多态?(一)

时间:2023-08-26 16:45:26浏览次数:60  
标签:函数 person int 成员 多态 C++ 访问 对象 三大

C++的三大特性:封装、继承、多态。

一、封装:将属性和行为作为一个整体,表现生活中的事物。一般来说就是把变量和函数一起放在一个类里,此时变量叫做成员变量,函数叫做成员函数。

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

 1 #include<iostream>
 2 using namespace std;
 3 
 4 //求圆的周长
 5 const double pi = 3.14;
 6 
 7 class circle
 8 {
 9 public:
10     int m_r;
11     double calculate()
12     {
13         return 2 * pi * m_r;
14     }
15 
16 };
17 int main()
18 {
19     //类与对象,通过类实例化一个对象,c1就是具体的圆
20     circle c1;
21     c1.m_r = 10;
22     cout << "圆的周长为:" << c1.calculate() << endl;
23     return 0;
24 }

 

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

访问权限有三种:

1.public    公共权限:类内类外都可以访问

2.protected  保护权限:类外不可以访问 ,类内可以访问   子类(派生类)可以访问基类中的保护内容

3.private   私有权限 :类外不可以访问,类内可以访问  ,子类也不可以访问父类的私有内容。

 1 #include<iostream>
 2 using namespace std;
 3 
 4 class person
 5 {
 6 public:
 7     //公共权限 ,让类外的也可以访问
 8     string m_Name;  //姓名
 9 
10 protected:
11     //保护权限 ,不想让类外访问,但想让子类可以访问
12     string m_Car;
13 
14 private:
15     //私有权限 ,只想让类内的可以访问,类外和子类都不可以访问
16     string m_Password;
17 
18 public:  //类内有的一个函数,public,protected,private 都可以访问
19     void func()
20     {
21         m_Name = "张老三";
22         m_Car = "拖拉机";
23         m_Password = "123456";
24         cout << m_Name << endl;
25         cout << m_Car << endl;
26         cout << m_Password << endl;
27     }
28 };
29 int main()
30 {
31     person p;  //用person类实例化一个对象p,类对象(属于类外)只能访问自己类的public成员,不能访问protected,private成员。
32     p.m_Name = "李四";
33     //p.m_Car = "奔驰";//报错,不可访问
34     //p.m_password = "123";
35 p.func();
36 
37     return 0;
38 }

注意:虽然把成员变量和成员函数放在已给类里,但类内的成员变量和成员函数是分开存储的,只有非静态成员变量才是属于类的对象上。非静态成员函数,
静态成员函数,静态成员变量都不属与类的对象上。
 1 #include <iostream>
 2 using namespace std;
 3 
 4 class  person
 5 {
 6 
 7 };
 8 class person2
 9 {
10     int  m_A;  //非静态成员变量 属于类的对象上
11 
12     void func(){} //非静态成员函数 ,不属于类对象上
13 
14     static int m_B; //静态成员变量 不属于类对象上
15     static void  func2(){}  //静态成员函数  也不属于类对象上。
16 };
17 int person2::m_B = 0;
18 int main()
19 {
20     person p;
21     //空对象占用内存空间为:1 
22     //C++编译器回个每个空对象也分配一个字节空间,是为了区分空对象占内存的位置
23     //每个空对象也站有一个独一无二的内存地址。
24     cout << sizeof(p) << endl; //输出为:1
25     
26     person2 p2;
27     cout << sizeof(p2) << endl;  //输出为:4,只有普通成员变量才是属于类对象上的
28     return 0;
29 }
既然成员变量和成员函数是分开存储的,每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码,那么这一块代码是如何区分
是哪个对象调用自己呢?
那就用到this指针,this指针指向被调用的成员函数所属的对象(谁调用,就指向谁)。
this指针的用途:
  1.当形参和成员变量同名时,用this指针来区分。
  2.在类的非静态成员函数中返回对象本身,可使用return *this。
 1 #include <iostream>
 2 using namespace std;
 3 
 4 //this指针的用途
 5 
 6 class person
 7 {
 8 public:
 9     person(int age)
10     {
11         //当形参和成员变量同名时,可用this指针来区分
12         this->age = age;
13     }
14 
15     person& personAddPerson(person p)
16     {
17         this->age += p.age;
18         //返回对象本身
19         return *this;
20     }
21     int age;
22 };
23 
24 int main()
25 {
26     person p1(10);
27     cout << "p1.age:" << p1.age << endl;  //10
28 
29     person p2(10);
30     p2.personAddPerson(p1).personAddPerson(p1).personAddPerson(p1);
31     cout << "p2.age:" << p2.age << endl;  //40
32     return 0;
33 }

 

 
 

 

标签:函数,person,int,成员,多态,C++,访问,对象,三大
From: https://www.cnblogs.com/py369/p/17658818.html

相关文章

  • 力扣-228. 汇总区间(C++题解)
    题目链接:https://leetcode.cn/problems/summary-ranges/description/给定一个 无重复元素的 有序整数数组\(nums\)。返回恰好覆盖数组中所有数字的最小有序区间范围列表 。也就是说,\(nums\)的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于\(......
  • [转]C++使用虚函数的时候,子类也要使用virtual关键字吗
    原文地址:https://blog.csdn.net/gao1440156051/article/details/45670715父类使用虚函数是为了让子类重写,那子类重写的时候也需要带virtual关键字吗?比如:classBase{virtualboolinit();};classDerived{virtualboolinit();//这里的vitual是必须的吗?好像不用也能编译通过呃…......
  • C#中扩展方法无法获得多态性的行为
    在C#中,扩展方法(ExtensionMethods)是一种用于给现有类型添加新方法的技术。但是,扩展方法无法实现多态性的行为,因为它们是静态方法,它们的行为是在编译时确定的,而不是在运行时。多态性是面向对象编程的一个重要概念,它允许不同的对象以不同的方式响应相同的方法调用。多态性的实现依......
  • 【算法-二分查找】实现过程、C++代码示例以及实际应用
    二分查找简介:也称为折半查找,是一个在已排序数组中查找特定元素的搜索算法。它的工作原理是将有序数组分成两半,然后检查目标值是在左半部分还是右半部分,然后在所选择的那部分中继续查找。这一过程将不断地重复,直到找到目标值或确定目标值不在数组中。实现过程:1.初始化两个指针:lo......
  • C++STL函数
    1、排序算法描述键盘输入5个整数,使用vector进行存储,使用STL排序算法对元素进行排序(从大到小),再使用STL遍历算法输出元素。(元素和元素之间使用空格隔开)输入描述:键盘输入5个整数输出描述:输出排序后的元素,元素和元素之间使用空格隔开。#include<iostream>#include<ve......
  • 《C++》C11新特性--1
    1.原始字符串字面量R"(字符串)"constchar*str1="D:hello\world\test.txt";constchar*str2=R"(D:hello\world\test.txt)";std::cout<<"直接输出str:\t\t"<<str1<<std::endl;std::cout<......
  • 字符串处理C++
    1、字符串连接题目描述不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。输入每一行包括两个字符串,长度不超过100。输出可能有多组测试数据,对于每组数据,不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。输出连接......
  • Java的三大结构
    三大结构顺序结构依次按照顺序输入和输出选择结果if选择结构单选择结构双选择结构多选择结构 注意事项if语句中只能有1个else语句else语句在elseif语句之后,if语法在elseif语法之前一旦有一个elseif语句检测为true,其他的语句则将跳过,程序结束嵌套结......
  • android 添加多个c++文件并 调用c++打印调试信息
    首先在gradle文件中配置cmake:注意文件路径一定要对应上android{//...defaultConfig{//...externalNativeBuild{cmake{cppFlags"-frtti-fexceptions-Wno-deprecated-declarations"......
  • C++之运算符
    运算符函数在C++中会把运算符当做函数处理,一个表达式,其实可能调用了很多运算符函数来完成计算,这种特性对内建类型没有用,但是对于自建类型而言,通过设计运算符函数能够进行个性化运算,以此提高代码的可读性、易用性,例如string类Ⅰ.运算符函数的格式:'#'表示运算符,'O'表示运算符对......