当前位置: 首页 > 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;
}

相关文章:

  • 宝山网站建设宝山aso平台
  • 珠海网站建设科速互联客服外包
  • 网页平面美工培训谷歌seo排名公司
  • 现在的公司都有自己的网站吗谷歌收录查询工具
  • 济南哪里做网站网站推广软件免费版下载
  • 网站建设 朝阳区流量宝官网
  • 【Java开发日记】详细地讲解一下如何保证线程安全性呢?
  • 鸿蒙原子化服务与元服务:轻量化服务的未来之路
  • 湖北理元理律师事务所:科学债务优化如何守护民生底线
  • 提示工程入门指南:如何有效地与大语言模型交互
  • Python Selenium 忽略证书错误
  • MongoDB入门学习(含JAVA客户端)
  • Postman接口测试入门
  • 数据结构进阶 - 第九章 排序
  • 使用 Python 自动化文件获取:从 FTP 到 API 的全面指南
  • 【Cursor 】Cursor 解析江科大倒立摆PID工程源码《00-PID综合测试程序-V1.1》《03-增量式PID定速控制》(Doxygen注释风格)
  • 同步互斥与通信-有缺陷的同步示例FreeRTOS笔记
  • CVPR-2025 | 缩小仿真与现实差距的具身导航新突破!Vid2Sim:从视频到逼真交互式仿真环境的城市导航
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit (6)
  • el-select封装下拉加载组件
  • 【Linux学习笔记】进程通信之消息队列和信号量
  • Oracle数据库捕获造成死锁的SQL语句
  • 采集文章+原创AI处理+发布网站详细教程
  • 开疆智能CCLinkIE转ModbusTCP网关连接PCA3200电能表配置案例
  • HarmonyOS NEXT仓颉开发语言实战案例:银行App
  • 【C++】组合模式