当前位置: 首页 > news >正文

c++面向对象编程

一、c++简介

编程思想就是解决当前的世界问题的建模,当前比较流行的编程思想主要有面向过程式编程(pop)和面向对象编程(oop)

1、面向过程编程

关注的是怎么做的问题,主要思路是将数据与函数按照指向性的逻辑顺序组织在一起,数据与函数分开考虑

特点:注重步骤与过程,不注重职责分工

2、面向对象编程

关注的是谁来做的问题

相比于面向过程来说,面向对象是更大的封装,首相确定的职责(要做的事情(方法)),根据职责确定不同的对象,在对象内部 封装不同的方法(多个)并实现它,最后按照业务逻辑让不同的对象调用不同的方法

特点:注重对象和责任,不同的对象承担不同的责任;比较适合应对复杂的需求变化的目的,已维护,易复用,易扩展,但是缺点是性能比面向过程低

如何选择?

在编写规模小的程序时,使用面向过程编程,对于中等和大型项目来说,面向对象将给代码的编码和维护带来优势

二、面向对象相关概念

1、什么是类

类是具有相同特征的(数据元素)和行为(功能)的对象的抽象,不能直接使用

特征被称为属性(是对事物的某种特性的抽象秒速,比如年龄、性别)

行为被称为方法(表示对象的行为(类中定义的函数,用来给类添加功能))

2、对象

客观世界中的任何事物都可以看做一个对象(object),对象是由类创建出来的一个具体存在,可以直接使用

哪一个类创建出来的对象,就拥有在哪一个类中定义的属性和方法

对象就相当于用图纸制造出来的汽车

3、类和对象的关系

类是模版,对象是根据类这个模版创建出来的,程序开发中应该先有类,再有对象

类只有一个,而对象可以有很多个,不同的对象之间的属性可能会各部相同

类定义了什么属性和方法,对象中就有什么属性和方法

4、如何设计类

在程序开发中,要设计一个类,通常需要满足一下三个因素:

1、类名:这类事物的名字,满足大驼峰命名法,比如CapWords

2、属性:这类事物具有什么样的特征

3、方法:这类事物具有什么样的行为

如何确定类名?

名词提炼法,分析整个业务流程,出现的名词,通常就是找到的类

5、面向对象的三大特征(重点)

封装

就是抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据和操作数据的源代码进行邮寄的结合,形成“类”,其中数据和函数都是类的成员

继承

继承性主要描述类与类之间的关系,通过继承,乐意在无需重新编写原有类的情况下,对原有类到的功能进行扩展

多态

一个类中的属性和方法被其他类继承后,对象早调用属性或方法所表现出来的不同行为,多态一般是发生在子类和父类之间

三、类类型的定义

#include <iostream>
#include <string>
#include<stdlib.h>
#include<string.h>
using namespace std;
//在C++中,给用户提供两种自定义数据类型的手段:结构体+类类型
class stu //类类型-----类类型就是C语言中结构体的加强版(主要的扩展点:允许在内部存放函数成员,可以对内部的成员设置访问权限)
{
public: //设置成员是否向外界暴露, 其实就用用来设置访问权限:public ,private,protectedstring name; //name id 它们是数据成员--用来描述事物的属性int id;void print() //叫成员函数或方法 ----描述事物的行为{cout << name << endl;}
private:int age;};int main()
{/*   struct stu s1;s1.name = "laoguo";s1.age = 12;s1.id = 33;*/return 0;
}
#include <iostream>
#include <string>
#include<stdlib.h>
#include<string.h>
using namespace std;//一个类中主要包含数据成员列表和函数成员列表,一个类可以只有数据成员,也可以只有函数成员,也可以两者都没有(空类)
class stu //class用来表示当前的类属于类类型,类名的命名要符号标识符的规则,可以采用驼峰法来命名,要做到见名知意
{//在一个类中可以写多个访问权限修饰符
public: //访问权限修饰符 有三个 public protected private, 使用格式:权限修饰符 :string name; //定义类时,如果省略访问权限修饰符,则任务该成员是私有的int id;void print() {cout << name << endl;}
private: //访问修饰符的修饰访问:是从当前的位置开始到下一个修饰符开始或类结束为止,这个就是它的修饰范围int age;public://同一个访问修饰符可以在类中出现多次,但是一般不推荐,建议 先写public ,protected ,最后privateint ff;};int main()
{/*   struct stu s1;s1.name = "laoguo";s1.age = 12;s1.id = 33;*/return 0;
}

四、对象的定义

#include <iostream>
#include <string>
#include<stdlib.h>
#include<string.h>
using namespace std;class stu
{
public:string name;int age;/* void print(){cout << name << age << endl;}*/virtual void print1() //类类型中的成员好结构图一样,也讲究内存对齐{cout << name << age << endl;}virtual void print2()//一个类中不管存在多少个虚函数,只会多占用一个指针大小的内存空间{cout << name << age << endl;}};int main()
{class stu s1;//类对象的定义格式:[ class ] 类名 对象名;class可有可无stu s2;//一个类可以创建多个类对象,这些对象之间的内存空间是独立的cout << sizeof(s2) << endl;//32---  一般来说,类中的成员函数不占用该类所创建对象的内存空间,意味着成员函数在内存中只存一份,供给类的所有对象所共享return 0;
}
#include <iostream>
#include <string>
#include<stdlib.h>
#include<string.h>
using namespace std;//class stu
//{
//public:
//    int a;
//    char b;
//
//
//    
//
//};//class stu1
//{
//public:
//    int a;
//    //char b;
//    static int c;
//
//
//
//};class stu2
{};int main()
{//cout << sizeof(stu) << endl;//8//cout << sizeof(stu1) << endl;//4.在C++中静态成员属于类 不属于对象cout << sizeof(stu2) << endl;//1.//一个类可以创建多个对象,为了在内存中区分不同的对象,因此需要给一个空类分配一个字节return 0;
}

五、类的成员函数与数据成员

#include <iostream>
#include <string>
#include<stdlib.h>
#include<string.h>
using namespace std;//关于C++ 数据成员 和函数成员如何定义class stu //类=数据成员+函数成员
{
public:string name;//数据成员= [const/static ]数据类型+成员名;int age;//定义成员函数有两种方式,一种方式 :直接在类内定义函数void print()//将函数定义在类内,一般不叫函数  叫成员函数或方法{cout << name << age << endl;}void mytest();//方式2:类内声明,类外实现  较常用 ,因为在类中定义的成员函数系统会会认为它是内置函数private:int id;};
//类外定义成员函数的格式: 返回类型  类名::成员函数名(形参列表){函数体}
void stu::mytest()// :: 作用域限定符
{cout << name << age <<id<< endl;//类中的成员函数 可以访问类中的私有成员 公有成员,受保护成员}int main()
{stu s1;s1.name = "sdf"; //对类中数据成员的初始化可以延用结构图的方式,采用逐成员进行初始化//s1.id = 100;不可以行,在类外初始化数据成员 有一个大的前提 是成员是公有的,//对于类中非公有成员,需要通过构造函数来对其初始化(较常用)。return 0;
}

五、引用中的成员

#include <iostream>
#include <string>
#include<stdlib.h>
#include<string.h>
using namespace std;class stu
{
public:string name;int age;void print()//将函数定义在类内,一般不叫函数  叫成员函数或方法{cout << name << age << endl;//类内访问数据成员: 直接写数据成员的名字}void mytest();/*  int  test()  类外可以通过类内的公共函数来间接获得类中非公有成员{return id;}*/private:int id;};void stu::mytest()// 在类中的成员函数内,可以调用类中其他数据成员和函数成员
{cout << name << age <<id<< endl;//类中的成员函数 可以访问类中的私有成员 公有成员,受保护成员print();
}int main()
{stu s1;s1.name = "sdf"; //访问类中数据成员的语法格式: 对象名.数据成员名;s1.age = 12;//如果对未初始化的数据成员进行访问,内部可能是随机值。//s1.print();//访问类中成员函数的语法格式对象名.成员函数名(【实参列表】);//通过对象名访问类中的成员,主要针对的是类中的公有成员(被public修饰的成员)s1.mytest();return 0;
}

http://www.lqws.cn/news/526789.html

相关文章:

  • 微积分 - 无穷小量
  • 数据分享:环境科学与公共健康行业-空气质量数据集
  • 汽车一键启动升级手机控车
  • SQL(6)
  • css 颜色与字体
  • Adam优化器
  • Nuitka 打包Python程序
  • NoSQL之Redis集群
  • 智慧生产管控数字化平台(源码+文档+讲解+演示)
  • Datax报错:在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数
  • Flutter 多平台项目开发指南
  • 使用Charles中文版抓包工具进行高效的API调试与性能优化
  • openharmony 性能检测工具
  • [架构之美]Spring Boot 3.5.3新特性解析及JDK21集成
  • Socket 编程 TCP
  • 小程序入门:理解小程序页面配置
  • ZYNQ GP总线深度实战:智能灯光控制器的PS-PL交互艺术
  • 128K 长文本处理实战:腾讯混元 + 云函数 SCF 构建 PDF 摘要生成器
  • 如何解决本地DNS解析失败问题?以连接AWS ElastiCache Redis为例
  • 华曦达港股IPO递表,AI Home生态构建智能生活新蓝图
  • dockercompose快速安装ELK
  • 设计模式 | 原型模式
  • 分布式I/O在风电行业的应用
  • 向量数据库milvus中文全文检索取不到数据的处理办法
  • Python 惰性求值实战:用生成器重构 Sentence 类
  • Milvus中 Collections 级多租户 和 分区级多租户 的区别
  • kubernetes架构原理
  • 【Docker基础】Docker容器管理:docker rm及其参数详解
  • Axure版TDesign 组件库-免费版
  • Ubuntu中使用netcat发送16进制网络数据包