C/C++程序基础 (六)面向对象
- 类的特性
- 抽象、封装、继承、多态、重载
- 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)重写是子类重写父类的虚函数或抽象函数,相同的方法名和参数列表以及返回值【运行时】。
- 注意:隐藏(重定义):子类重定义父类的同名函数(参数列表可以不同),隐藏父类同名函数。
C/C++程序基础 (六)面向对象的更多相关文章
- Java基础-初识面向对象编程(Object-Oriented-Programming)
Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...
- (转)Python成长之路【第九篇】:Python基础之面向对象
一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...
- [.net 面向对象编程基础] (12) 面向对象三大特性——继承
[.net 面向对象编程基础] (12) 面向对象三大特性——继承 上节我们说了面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低 ...
- Day7 - Python基础7 面向对象编程进阶
Python之路,Day7 - 面向对象编程进阶 本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个 ...
- Python 基础 四 面向对象杂谈
Python 基础 四 面向对象杂谈 一.isinstance(obj,cls) 与issubcalss(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls ...
- 自学Python之路-Python基础+模块+面向对象+函数
自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python 1.1 自学Python1.1-简介 1.2 自学Python1.2-环境的 ...
- C#_02.15_基础六_.NET类
C#_02.15_基础六_.NET类 一.类继承是一个类在另一个类的基础上进行的扩展. 继承的子类拥有父类的全部成员.索引子类拥有本身的全部成员以及父类的全部成员. 可以对基类成员进行隐藏,如果必须的 ...
- JAVA(一)JAVA基础/面向对象基础/高级面向对象
成鹏致远 | lcw.cnblog.com |2014-01-23 JAVA基础 1.开发环境搭建 JAVA程序的执行流程 JAVA命令->要使用一个*.class文件(类文件)->通过c ...
- {Django基础六之ORM中的锁和事务}一 锁 二 事务
Django基础六之ORM中的锁和事务 本节目录 一 锁 二 事务 一 锁 行级锁 select_for_update(nowait=False, skip_locked=False) #注意必须用在 ...
- Python基础7 面向对象编程进阶
本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 经典 ...
随机推荐
- State模式(状态设计模式)
State??? State模式中,我们用类来表示状态.以类来表示状态后,我们就能通过切换类来方便地改变对象的状态.当需要增加新的状态时,如何修改代码这个问题也会很明确. 直接用状态代替硬编码 依赖于 ...
- shiro 重定向 后 带有 sessionId 的 解决 办法
http://blog.csdn.net/aofavx/article/details/51701012
- SPOJ 3267: DQUERY 树状数组,离线算法
给出q个询问,询问一段区间里面的不同元素的个数有多少个. 离线做,用树状数组. 设树状数组的意义是:1--pos这个段区间的不用元素的种类数.怎么做?就是add(pos,1);在这个位置中+1,就是说 ...
- python学习二(文件与异常)
Python中使用open BIF与文件交互,与for语句结合使用,一次读取一行 读取文件sketch.txt,文件内容如下: Man: Ah! (taking out his wallet and ...
- Spark编程模型(下)
创建Pair RDD 什么是Pair RDD 包含键值对类型的RDD类型被称作Pair RDD: Pair RDD通常用来进行聚合计算: Pair RDD通常由普通RDD做ETL转化而来. Pytho ...
- 面试大全之JVM篇
JVM 内存模型以及分区,需要详细到每个区放什么. JVM 分为堆区和栈区,还有方法区,初始化的对象放在堆里面,引用放在栈里面,class类信息常量池(static常量和static变量)等放在方法区 ...
- Java编程中中文乱码问题的研究及解决方案
0 引言 Java最大的特性是与平台的无关性及开发环境的多样性.字符串被Java应用程序转化之前,是根据操作系统默认的编码方式编码.Java语言内部采用Unicode编码,它是定长双字节编码,即任何符 ...
- 如何 求Ifeature 的面积
IArea pArea = pfteature_Source.Shape as IArea;// IArea来自geometry double dArea = Math.Round(pArea.Ar ...
- 改善WPF应用程序性能的10大方法 (转发)
WPF(Windows Presentation Foundation)应用程序在没有图形加速设备的机器上运行速度很慢是个公开的秘密,给用户的感觉是它太吃资源了,WPF程序的性能和硬件确实有很大的关系 ...
- 跨平台移动开发phonegap/cordova 3.3全系列教程-简介
一. 跨平台實現架構: phonegap +asp.net+jquery mobile/jqmobi 二. PhoneGap简介 PhoneGap是一个开源的开发框架,用来构建跨平台的使用HT ...