C++学习笔记 Day 6

来源:互联网 发布:植物精灵 mac 编辑:程序博客网 时间:2024/06/05 08:39
  1. cpp文件和.h文件有各自的分工,一般来说,h文件中是类的定义和类成员函数的声明,以及全局变量定义等;cpp文件是对应h文件中成员函数的代码实现。一般cpp文件代码较多。
    这样做的好处:h文件只声明类成员函数,简单易懂,当其他文件要调用该类的接口时,只需包含该h文件,并在编译时将该h文件和同名cpp文件编译出的库文件一起连接即可。(如在lz写的main文件中只需 #include “Alarm.h”)
  2. 一般我们在编译的时候只编译cpp文件,将该cpp包含的h文件设为依赖。从而将这些cpp文件和h文件联系起来

public
private
protected 继承和派生时 对派生类的影响不同

数据抽象和封装
类设计者 必须关心类是如何实现的 但使用该类的程序员不比了解这些细节
只用抽象的考虑

class Stack
{
public:
void Push(int elem);
int Pop();
}

类的使用者不需要关注内部是怎么实现的 也不需要关注类内部所采用的数据 他只需要关注这个类能实现什么功能 只要这个类所提供的功能不变 也就是类所暴露的接口不变

数据抽象是 依赖于接口和实现分离的编程技术

封装 是一项将低层次的元素组合起来形成新的 高层次的实体的技术

并非给客户越多的东西就是越好的服务
仅仅给他需要的东西才是最好的服务

这样能防止粗心的程序员破坏内部的数据结构

内敛成员函数

内联函数可以提高运行效率 编译的时候将代码直接嵌入到调用的地方 从而减少了函数调用的开销
体积增大 以空间换时间
短小
内联函数 仅仅只是给编译器一个提示 如果函数中有for编译器就不会看成内联的

有两种定义方式

函数重载
相同的作用域中进行重载

void Init();
void Init(int x);
void Init(int x,int y);
void Init(int x,int y,int z);

类与结构体

成员函数是只读代码 由所有对象共享

t1.Init(&t1,10,20,30);
隐含的this指针 指向我们构造的对象

类作用域
前向声明
嵌套类
局部类

类作用域

该作用域的说明符只在类中可见 在外部进行赋值是错误的 除非重新定义
文件作用域

块作用域 花括号以内
文件作用域 通过域运算符::来调用文件作用域的变量 在任何代码之外的变量 作用域从定义的地方到程序结束

函数原型作用域
int add(int a,int b);

int add(int a,int b) 形参也算是块作用域

函数作用域 针对goto语句

类作用域

前向声明
c++中类必须先定义 才能够实例化

前向声明的类不能实例化对象 可以定义指针或是引用

嵌套类

外围类需要使用嵌套类对象

局部类
类定义在函数体内 只在局部域可见
成员函数必须定义在函数体内 局部类中不能定义静态成员 这是因为静态成员的初始化 在文件外部
局部类内部不能定义静态成员

构造函数是特殊的成员函数
函数名和类名一致
不定义类型

不带参数的构造函数称为默认构造函数

构造函数可以重载
构造函数和new运算符

new operate 分配内存 调用构造函数

动态分配的内存需要自己释放
delete 释放内存 调用析构函数
析构函数 不能被重载 所以也不带参数

全局对象的构造先于main函数

析构函数与数组的关系
动态对象

析构函数与delete运算符

析构函数可以显示调用 但不推荐

构造函数是一种特殊的成员函数 在创建对象时自动调用 对对象的数据成员进行初始化 栈区中创建的对象 在生存期结束的时候会自动调用析构函数
在堆上创建的对象 要有程序员显示调用delete

转换构造函数
单个参数的构造函数 将其他类型转换为类类型

构造函数的作用 一是 初始化 二是类型转换 需要用转换构造函数 即带一个函数的构造函数

带一个参数的构造函数 只充当普通构造函数的作用
转换构造函数 初始化 类型转换

赋值与初始化的区别
t=t2;<==>t.operator(t2)
初始化中的=号不是运算符 是初始化

explicit 编译器显示转换 表示只能够显示构造对象

构造函数和析构函数

构造函数初始化列表

构造函数的执行过程过程分为 初始化化段 和普通计算段
类实例化对象本质上是定义了一个内存 有先后顺序的

const成员 的初始化
const int kNum_;

常量的初始化必须在构造函数的 初始化列表中进行
引用成员的的初始化

拷贝构造函数 已有的类来初始化新的类

Test t(10);
Test t2=t<==>Test t2(t);
只有一个参数 且参数必须是对象的引用
Test(const Test& other);

拷贝构造函数调用的几种情况

深拷贝 和 前拷贝
禁止拷贝

0 0
原创粉丝点击