C/C++程序基础 (六)面向对象
2024-08-28 06:26:17
- 类的特性
- 抽象、封装、继承、多态、重载
- class 和 struct 区别
- C中struct仅仅可以包含数据成员,不可以有成员函数,属于复杂数据结构。
- C++ 中struct成员访问权限默认为public;继承方式默认public;另外class可以用在模板的声明。template <class/typename T>
- 构造函数的初始化列表
- 顺序和成员声明顺序一致。
- 必须应用的场景:初始化const、引用;调用父类的非默认构造函数。B(int x,int y):A(x)
class A
{
public:
A(int k) : j(k), i(j) // i first. j follow
{
// code here
} private:
int i;
int j;
}静态数据成员和全局变量的区别:
- 名称空间不同,避免冲突。
- 支持信息封装,属于成员变量,可以设置为private。
- 注意:静态非常量数据成员在类外初始化,静态常量数据成员在类内初始化或类外初始化。非静态常量必须在初始化列表。非静态非常量在初始化列表或构造函数。
- 空类的成员函数
- 默认构造函数和复制构造函数
- 析构函数(不可以被重载,不带参数)
- 赋值函数(=)
- 取值运算(&)
- explicit 修饰的构造函数
- 只一个参数(其余为默认参数)的构造函数支持隐式转换。test(int i) { ... } ; test a = 1;
- explicit可以关闭这种隐式转换。仅可以通过test a(1);
- 析构、构造函数与虚函数的关系
- 构造函数不可以写成虚函数,虚函数需要虚指针和虚表的支持,而这些是构造函数负责实现的。
- 析构函数需要写成虚函数,可以保证子类析构函数的正常调用。 Base* a = new Derived(); delete a;
- 复制构造函数
- 概念:特殊构造函数,根据同类其他对象构建以及初始化新对象。
- 调用场景:按值传递,按值返回,使用对象进行初始化(test b; test a = b;)。
- 默认浅复制。深复制 vs 浅复制,当对象中引用了外部内容,如果新旧指向同一内容为浅复制,否则为深复制。
- 继承类的处理:调用基类的复制构造函数。
- 与赋值函数的区别:1)复制是初始化对象,赋值是修改原有对象。2)复制是初始化,赋值首先检查两个对象是否一致,一致返回,不一致,释放左值对象的内存并重新构建。
// 复制构造函数
A a;
A b = a; //赋值函数
A a;
A b;
a = b; //赋值函数举例
string& string::operator = (const string &other)
{
//检查是否一致
if(this == &other)
return *this;
// 释放内存
delete[] m_string;
// 重新分配
m_string = new char[strlen(other.m_string) + ];
strcpy(m_string, other.m_string); return *this;
}临时对象
- 出现情景:参数按值传递,返回值按值传递。
C++函数重载
- 为什么可行:C++命名规则,包含参数个数和参数类型信息。
- 注意:返回值不同,const与否不足以区分函数。
- 重载和重写的区别:1)重载不同版本的函数实现,方法名相同而参数列表不同【编译时】。2)重写是子类重写父类的虚函数或抽象函数,相同的方法名和参数列表以及返回值【运行时】。
- 注意:隐藏(重定义):子类重定义父类的同名函数(参数列表可以不同),隐藏父类同名函数。
最新文章
- >;>;>; 主页推荐链接
- swift 学习(二)基础知识 (函数,闭包,ARC,柯里化,反射)
- 学习mongo系列(一) win/mac安装 解析 连接
- 电赛总结(二)&mdash;&mdash;AD芯片总结之AD7705
- 获取fragment中的控件的写法
- 修改字符串 ToCharArray()
- haproxy实现会话保持(1):cookie
- MySQL 基础--字符类型
- POJ - 2828 Buy Tickets(线段树单点更新)
- dubbo系列五、dubbo核心配置
- 前端框架之Vue(7)-事件处理
- IntelliJ快捷键笔记
- 《PHP, MySQL, Javascript和CSS》读书随手记----php篇
- 搭建MySQL高可用负载均衡集群(转)
- [luogu2668] 斗地主
- 团队作业4——第一次项目冲刺(Alpha版本)2017.11.18
- DIV+CSS专题:十天学会DIV+CSS
- PHP常用180函数总结
- 第三届蓝桥杯决赛c++b组
- *AtCoder Regular Contest 096E - Everything on It
热门文章
- PIL基础操作
- 06.Spring 资源加载 - ResourceLoader
- 宋宝华:swappiness=0究竟意味着什么?
- (转)centos7.4 fdisk磁盘分区 格式化 挂载
- Storm概念学习系列之storm-starter项目(完整版)(博主推荐)
- python接口自动化(四十一)- 发xml格式参数的post请求(超详解)
- Windows安全认证是如何进行的?[NTLM篇]
- spring技术小结
- kotlin查看编译后的Java代码
- windows 2012 r2 x64 安装IIS注意事项