公司动态
C/C++日记2
1.C/C中传参方式有哪些有什么区别首先有三种传参方式分别是值传递——指针传递——引用传递1值传递a. 形参会将实参复制到一块新的地址空间中就相当于房间1和房间2里面变量值相等。在函数内部操作形参就是在房间2里面操作变量你如何操作房间2中的变量房间1里的始终不会发生任何改变。b. 自然而然可以看到房间2和房间1地址不一样将原本房间1的变量值复制到房间2中涉及到拷贝2指针传递a. 指针传递不再是复制实参的值了而是复制实参的地址号作为形参将实参的地址作为一个变量保存到一个新的空间。b.需不需要拷贝呢需要需不需要另外开辟空间呢需要来存放实参的地址那么对形参操作会对实参有影响吗?当然了地址一样操作的不还是房间1里的值嘛3引用传递a. 引用传递就相当于形参和实参链接成为一体了不经历值拷贝和地址拷贝不用开辟新的地址空间。b.链接上成为一体了自然而然操作形参就是操作实参。2.全局变量在头文件定义会出现什么问题1. 首先说全局变量可以在头文件中声明但不应该定义也就是说不应该初始化值。2当以个全局变量在头文件中定义后多个源文件引用该头文件并使用此全局变量出现一个全局变量被定义多次问题链接时产生重复定义的错误3.应该怎样做头文件.h文件使用extern 只进行声明源文件中进行定义。3.面向对象编程的特性或者说C的三大特性1.封装首先说封装、或者说面向对象编程主要优势是为了复用和解耦。封装是什么将一些对象的共有特征属性、成员属性和共有行为或者是抽象行为方法也叫成员函数装在一个类中。其中这些属性和方法可以共有就是共享的也可以私有就是我独享的。2.继承封装成了一个类比如叫做人那么创建一个他的子类叫做男人。难道男人类和人类之间共有的属性和方法我还要在男人类里再定义一遍吗当然不用我们可以让男人类继承人类这样人类中所有共享的属性和方法我们男人类也就轻而易举得到了。3.多态a.重写前面说了封装除了会将共有的属性和方法封装进去外一些抽象的方法还没确定它的具体行为也封装进去了。那么我们男人类也继承了这个抽象方法但是现在我在男人类中我想要实现他的具体方法那么这时候就要对人类中的这个抽象方法进行重写。其实就是子类重新实现父类中的虚函数。在C中使用virtul修饰的函数叫做虚函数其实这个虚函数和pyhon中的抽象方法一个意思。b.重载重载也算是多态他的要求是在同一作用域下比例一个类中一个函数和另一个函数函数名相同参数列表一定不同返回值类型不做要求那么这个函数就是另一个函数的重载。c.其实重写也是有条件的必须是子类对父类的重写不能颠倒。被重写的这个父类中的函数必须是虚函数且必须时公有继承。子类中重写的函数必须和父类中的虚函数函数名、参数列表和返回值类型必须一样。4.C中的多态是什么怎么实现的C多态一句话来讲就是同一操作但是作用于不同对象会产生不同的效果。C多态分为两种静态多态编译期多态和动态多态运行时多态1.静态多态编译器多态程序编译期间就确定调用哪个函数核心依赖静态绑定主要实现方式重载、运算符重载、模板前提同一个作用域2.动态多态运行时多态主要实现方式子类重写父类虚函数