孙鑫C++课程笔记2——创建类

本文深入讲解C++中结构体与类型的差异、父类与子类的成员访问规则、虚函数及其实现机制、引用与指针的区别,并探讨了头文件包含方式及VC++编译链接原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lesson 2
一、结构体与类型的区别:
与C语言不同的是,在C++中的结构体允许拥有函数成员,这和类有很大的相似性,二者的主要差别在于成员的访问权限上:
*缺省状态下,结构体的成员一律默认为是Public的,可以在外部访问,当然也可以将这些成员声明成Private的。
*缺省状态下,类的成员一律默认为是Private的。

二、父类与子类的成员访问规则:

三、虚函数的概念
声明方式:在函数头前面加上关键字virtual : virtual void FunName(int ,int);
虚函数的引入是为了C++多态 的特性,一般的使用场景为:如果你声明了一个父类的指针指向一个子类的对象,利用该指针进行函数调用,那么,当你调用的函数在父类中声明是虚函数时,C++会采用迟绑定策略(late binding),根据指针指向的具体对象类型判断需要调用那个函数,如果子类中有这个函数,则执行子类的函数定义,如果没有,则执行这个父类的虚函数调用。
虚函数的实现实际上使用了一个虚函数表的概念,这个虚函数表解决了继承和覆盖的问题,一个类如果有虚函数的的时候,在创建一个这个类的对象时,该对象最前面的存储空间位置会维护一个虚函数表,里面存放的是这个类所有的虚函数,存放顺序按照函数声明的先后顺序,而且首先存放父类的虚函数,其次是子类的,除非有覆盖的情况发生。

纯虚函数指的是没有函数实现,只有函数声明的虚函数,声明方式为:
virtual void FunName()=0;
纯虚函数是不能调用的,除非给了他的实现。例如,在父类定义了一个纯虚函数,继承的子类给出了这个函数的实现,那么这个子类的对象就可以调用它,纯虚函数往往用在设计父类时,不确定会不会在以后建立的派生类中用得到某些函数,可以先在父类中给出这个纯虚函数的声明。
另外,当子类去继承父类的虚函数的时候,子类的这个函数同样是一个虚函数,
不管有没有在其前加上virtual关键字。在这种情况下,子类函数会覆盖父类的函数,在虚函数表上的表现就是:在这个子类的对象最开始的存储空间上,子类的虚函数代替了父类的虚函数的位置,这样如果你调用一个子类对象的虚函数,父类的这个函数就不会产生影响。

四,引用
定义一个变量的引用,实际上是给这个变量一个别名定义方式为:
int a=0;
int &b=a;
上面就定义了一个变量a的别名,a和b指向同一个内存空间,改变a的同时也会改变a;引用变量必须在定义时初始化。引用和指针在内存空间上的区别:

引用与指针在使用上的区别在于,是代码更具有逻辑性,例如,我们分别用引用和指针作为参数实现一个操作符“=”的重载函数:
指针版本:ClassName operator =(ClassName * another);
引用版本:ClassName operator =(ClassName & another);
那么在调用的时候,二者的形式分别为:
指针版本: ClassName a;
ClassName b;
a=&b
引用版本: ClassName a;
ClassName b;
a=b;
显然,传递引用更具有逻辑性;二者还具有其他形式的区别,简单表示为:
指针:变量,独立,可变,可空,替身,无类型检查;
引用:别名,依赖,不变,非空,本体,有类型检查;

五,为什么包含自定义的头文件用双引号,包含系统头文件要用尖括号?
二者的主要区别在于搜寻文件路径的起点上面;如果头文件使用双引号包含的,则从该项目(工程)的当前目录下开始查找,如果使用的是尖括号,则从系统目录下开始查找。其实可以统一用双引号,这样的话,会先从当前目录下查找,如果没有找到,则去系统目录下查找。

六、使用命令代码块:

ifndefine abcdefg; //这只是随便定义一个宏,不代表要使用它,与# define

define abcdefg 1; // # define abcdefg;等效

endif

在头文件中,来防止头文件被重复包含。

七、VC++程序编译链接原理与过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值