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

c++面向对象编程

类成员的访问控制

在C++中,类成员(包括成员变量和成员函数)可以定义不同的访问级别:

  • public:公有成员,可以在类的内部和外部被访问。
  • private:私有成员,只能在类的内部被访问,类的外部无法直接访问。
  • protected:保护成员,在类的内部和派生类中可以访问,但在类的外部无法访问。

面向对象程序设计方法

面向过程程序设计
  • 特点:用户需求简单而固定,通过分析解决问题所需要的步骤,利用函数实现各个步骤,并依次调用函数解决问题。
  • 问题:软件可重用性差,软件可维护性差。
面向对象程序设计
  • 核心:由现实世界建立软件模型,通过属性和方法来描述现实世界中的事物。
  • 特点:直接分析用户需求中涉及的各个实体,在代码中描述现实世界中的实体,并关联各个实体协同工作解决问题。
  • 优势:构建的软件能够适应用户需求的不断变化。

面向对象三大特征

  1. 封装:将变量(属性)和函数(操作)合成一个整体,封装在一个类中,尽可能隐蔽对象的内部细节,只保留有限的对外接口。
  2. 继承:允许我们根据一个类(基类或父类)来定义另一个类(派生类或子类),派生类继承了基类的属性和方法,并可以添加新的属性和方法或重写已有方法。
  3. 多态:允许将子类对象当作父类对象来使用,一个接口多种实现,实现接口的多样化。

构造函数定义

  • 定义:与类名相同的特殊成员函数,用于初始化对象。
  • 特点:可以有参数,也可以没有参数;没有返回类型(连void都没有);可以重载。
无参构造函数
class Animal { 
public: 
char name[20]; 
int age; // 无参构造函数 
Animal() { 
cout << "Animal()" << endl; 
} 
}; // 调用时机 
Animal a, b; 
Animal x[4]; // 注意:Animal a(); 这不是构造对象,而是声明了一个返回Animal类型的函数a,不接受参数。

有参构造函数

class Animal { 
public: 
char name[20]; 
int age; // 无参构造函数 
Animal() { 
cout << "Animal()" << endl; 
} // 有参构造函数 
Animal(const char* n, int a) { 
strcpy(name, n); 
age = a; 
cout << "Animal(" << name << ", " << age << ")" << endl; 
} 
}; // 调用时机 
Animal c("Dog", 3);

初始化成员列表
  • 初始化成员列表用于在构造函数体执行之前初始化成员变量。
  • 适用于引用成员、const成员以及需要调用构造函数的类类型成员。
class Box { 
private: 
int length, width, height; public: 
// 使用初始化成员列表 
Box(int x, int y, int z) : length(x), width(y), height(z) { 
cout << "Box(" << x << ", " << y << ", " << z << ")" << endl; 
} 
};

总结

  1. 构造一个对象时会自动调用一个构造函数。
  2. 如果一个类中没有定义任何构造函数,编译器会生成一个默认的无参构造函数(前提是没有定义其他构造函数)。
  3. 如果类中定义了带参数的构造函数,而没有定义无参构造函数,那么在尝试不带参数构造对象时会编译失败。
  4. 构造函数可以重载,根据构造对象时所传递的参数,会自动调用对应的构造函数。
  5. 类本身不占用程序的内存空间,只有类的实例(对象)才会占用内存空间。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ClickHouse分布式部署搭建单分片二副本集群
  • 简易的 Websocket + 心跳机制 + 尝试重连
  • 信息打点-Web架构篇域名语言中间件数据库系统源码获取
  • 容器存储接口--CSI
  • HarmonyOS--认证服务-操作步骤
  • MySQL语法常用优化
  • C语言小项目源码大全(60套)
  • 【openwrt-21.02】openwrt-21.02 T750 按键GPIO自动进入刷机模式功能实现
  • gitlab迁移至新的服务器
  • JAVA-常见八股文(4)-内部类和匿名内部类
  • 在ElementUI项目中集成iconfont图标库
  • post请求
  • Java 应用的链路追踪:调用关系与性能分析
  • C++资料电子书资源PDF免费分享
  • pytorch深度学习基础 8(简单的神经网络替换线性模型)
  • ES6指北【2】—— 箭头函数
  • Date型的使用
  • ES6--对象的扩展
  • Git学习与使用心得(1)—— 初始化
  • Java Agent 学习笔记
  • Javascript基础之Array数组API
  • nginx 负载服务器优化
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • sessionStorage和localStorage
  • XML已死 ?
  • 测试如何在敏捷团队中工作?
  • 关于 Cirru Editor 存储格式
  • 记一次删除Git记录中的大文件的过程
  • 记一次用 NodeJs 实现模拟登录的思路
  • 盘点那些不知名却常用的 Git 操作
  • 普通函数和构造函数的区别
  • 使用 Docker 部署 Spring Boot项目
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​ArcGIS Pro 如何批量删除字段
  • ​flutter 代码混淆
  • ​第20课 在Android Native开发中加入新的C++类
  • # 达梦数据库知识点
  • (7) cmake 编译C++程序(二)
  • (二)原生js案例之数码时钟计时
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (利用IDEA+Maven)定制属于自己的jar包
  • (六)vue-router+UI组件库
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (顺序)容器的好伴侣 --- 容器适配器
  • (一)appium-desktop定位元素原理
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • ***原理与防范
  • *Django中的Ajax 纯js的书写样式1
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .gitignore文件—git忽略文件