MFC视频教程(孙鑫)学习笔记2-掌握C++ 封装、继承、多态。当一个对象生命周期结束时,其所占有的内存空间就要被回收,这个工作就由析构函数来完成。  2、析构函数是“反向”的构造函数,析构函数不允许有返回值,更重要的是析构函数不允许带参数,并且一个类中只能有一个析构函数。 C++又规定,如果一个类没有提供任何的构造函数,则C++提供一个默认的构造函数(由C++编译器提供),这个默认的构造函数是一个不带参数的构造函数,它只负责创建对象,而不做任何的初始化工作。  4、只要一个类定义了一个构造函数,不管这个构造函数是否是带参数的构造函数,C++就不再提供默认的构造函数。也就是说,如果为一个类定义了一个带参数的构造函数,还想要无参数的构造函数,则必须自己定义。  封装、继承、多态。

MFC视频教程(孙鑫)学习笔记2-掌握C++

封装、继承、多态。当一个对象生命周期结束时,其所占有的内存空间就要被回收,这个工作就由析构函数来完成。 
2、析构函数是“反向”的构造函数,析构函数不允许有返回值,更重要的是析构函数不允许带参数,并且一个类中只能有一个析构函数。 C++又规定,如果一个类没有提供任何的构造函数,则C++提供一个默认的构造函数(由C++编译器提供),这个默认的构造函数是一个不带参数的构造函数,它只负责创建对象,而不做任何的初始化工作。 
4、只要一个类定义了一个构造函数,不管这个构造函数是否是带参数的构造函数,C++就不再提供默认的构造函数。也就是说,如果为一个类定义了一个带参数的构造函数,还想要无参数的构造函数,则必须自己定义。 

封装、继承、多态。

这一集中,主要总结了C++经典语法与应用。

1. C++的三大特性:封装、继承、多态。

2. C++中提供了一套输入输出流类的对象,它们是cin 、cout和cerr,对应c语言中的三个文件指针stdin、stdout、stderr,分别指向终端输入、终端输出和标准出错输出(也从终端输出)。cin与>>一起完成输入操作,cout、cerr与<<一起完成输出与标准错误输出。利用cin和cout比C语言中的scanf和printf要方便得多,cin和cout可以自动判别输入输出数据类型而自动调整输入输出格式,不必像scanf和printf那样一个个由用户指定。使用cin,cout不仅方便,而且减少了出错的可能性。对于输出来说,我们像以上方式调用就可以了,对于输入来说,我们以如下方式调用即可:
int i;
cin>>i;

注意箭头的方向。在输出中我们还使用endl(end of line),表示换行,注意最后一个是字符‘l’,而不是数字1,endl相当于C语言的' ',表示输出一个换行。 

3.  C++中结构中可以包含函数,与类区别是它默认为public。 在C语言中,结构不能包含函数。

4.  构造函数:

C++构造函数,每个类必须包含构造函数,构造函数的作用是创建对象本身,分配内存。没有构造函数,就不能创建对象

C++又规定,如果一个类没有提供任何的构造函数,则C++提供一个默认的构造函数(由C++编译器提供),这个默认的构造函数是一个不带参数的构造函数,它只负责创建对象,而不做任何的初始化工作。 
只要一个类定义了一个构造函数,不管这个构造函数是否是带参数的构造函数,C++就不再提供默认的构造函数。也就是说,如果为一个类定义了一个带参数的构造函数,还想要无参数的构造函数,则必须自己定义。 
(与C#一样的)

5. 析构函数:

当一个对象生命周期结束时,其所占有的内存空间就要被回收,这个工作就由析构函数来完成。 

析构函数是“反向”的构造函数,析构函数不允许有返回值,更重要的是析构函数不允许带参数,并且一个类中只能有一个析构函数。 

析构函数的作用正好与构造函数相反,对象超出其作用范围,对应的内存空间被系统收回或被程序用delete删除时,析构函数被调用。

  根据析构函数的这种特点,我们可以在构造函数中初始化对象的某些成员变量,给其分配内存空间(堆内存),在析构函数中释放对象运行期间所申请的资源。 

6. 函数重载:

   重载构成的条件:函数的参数类型、参数个数不同,才能构成函数的重载。 (在C#中又称函数签名)


7.  this指针

this指针是一个隐含的指针,它是指向对象本身,代表了对象的地址this = &classname

一个类所有的对象调用的成员函数都是同一代码段。那么成员函数又是怎么识别属于同一对象的数据成员呢?原来,在对象调用pt.output(10,10)时,成员函数除了接受2个实参外,还接受到了一个对象s的地址。这个地址被一个隐含的形参this指针所获取,它等同于执行this=&pt。所有对数据成员的访问都隐含地被加上前缀this->。例如:x=0; 等价于 this->x=0。 


8. 类的继承
继承的权限,public,protected,private。构造函数的初始化,需要继承父类的构造函数

MFC视频教程(孙鑫)学习笔记2-掌握C++

封装、继承、多态。当一个对象生命周期结束时,其所占有的内存空间就要被回收,这个工作就由析构函数来完成。 
2、析构函数是“反向”的构造函数,析构函数不允许有返回值,更重要的是析构函数不允许带参数,并且一个类中只能有一个析构函数。 C++又规定,如果一个类没有提供任何的构造函数,则C++提供一个默认的构造函数(由C++编译器提供),这个默认的构造函数是一个不带参数的构造函数,它只负责创建对象,而不做任何的初始化工作。 
4、只要一个类定义了一个构造函数,不管这个构造函数是否是带参数的构造函数,C++就不再提供默认的构造函数。也就是说,如果为一个类定义了一个带参数的构造函数,还想要无参数的构造函数,则必须自己定义。 

封装、继承、多态。

9. 函数的覆盖
函数的覆盖是发生在父类与子类之间,函数的重载是发生在类内部


10. C++的虚函数,
纯虚函数,子类必须实现的函数
virtual void breathe = 0;


11. C++的引用与指针的区别
int a = 6;
int &b = a;
引用和指针变量的内存模型
引用不需要占用内存,指针变量本身占用内存,存放变量地址,引用是变量的一个别名,通常用于函数传递参数。


// 引用传参
void change(int &a,int &b)
{
int tmp = a;
a = b;
b= tmp;
}
change(a,b);


// 指针传参
void change(int* pA,int* pB)
{
int tmp = *pA;
*pA = *pB;
*pB = tmp;
}
change(&x,&y);

MFC视频教程(孙鑫)学习笔记2-掌握C++

封装、继承、多态。当一个对象生命周期结束时,其所占有的内存空间就要被回收,这个工作就由析构函数来完成。 
2、析构函数是“反向”的构造函数,析构函数不允许有返回值,更重要的是析构函数不允许带参数,并且一个类中只能有一个析构函数。 C++又规定,如果一个类没有提供任何的构造函数,则C++提供一个默认的构造函数(由C++编译器提供),这个默认的构造函数是一个不带参数的构造函数,它只负责创建对象,而不做任何的初始化工作。 
4、只要一个类定义了一个构造函数,不管这个构造函数是否是带参数的构造函数,C++就不再提供默认的构造函数。也就是说,如果为一个类定义了一个带参数的构造函数,还想要无参数的构造函数,则必须自己定义。 

封装、继承、多态。


11. 类重复定义问题:


#ifndef POINT_H
#define POINT_H
class Point
{};
#endif


12. vc++程序编译链接原理及过程

预处理->编译->链接

MFC视频教程(孙鑫)学习笔记2-掌握C++

封装、继承、多态。当一个对象生命周期结束时,其所占有的内存空间就要被回收,这个工作就由析构函数来完成。 
2、析构函数是“反向”的构造函数,析构函数不允许有返回值,更重要的是析构函数不允许带参数,并且一个类中只能有一个析构函数。 C++又规定,如果一个类没有提供任何的构造函数,则C++提供一个默认的构造函数(由C++编译器提供),这个默认的构造函数是一个不带参数的构造函数,它只负责创建对象,而不做任何的初始化工作。 
4、只要一个类定义了一个构造函数,不管这个构造函数是否是带参数的构造函数,C++就不再提供默认的构造函数。也就是说,如果为一个类定义了一个带参数的构造函数,还想要无参数的构造函数,则必须自己定义。 

封装、继承、多态。

封装、继承、多态。