摘要: 运算符重载分为两种形式,一种是成员函数重载,一种是全局函数重载。 +重载 采用成员和全局重载的方法是相同的结果的,但是请注意全局重载有两个参数第一个参数是加号左边的值,第二个参数是加号右边的值;而对于成员函数重载只有一个参数,加号左边的对象是重载函数的调用者,加号右 边的对象作为参数传入重载函数。 阅读全文
posted @ 2023-02-24 23:56 Meetalone 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 友元全局函数 对于类内部的私有成员如果外部的函数想要直接访问类的私有成员是不合法的,而友元函数却能合法访问。 友元类 同样的对于一个类如果想要访问其他类的私有成员,那么可以在类中声明友元。 友元成员函数 使某个类的成员函数成为另一个类的友元成员函数使其能够访问这个类的私有成员。 注意,友元函数的声明 阅读全文
posted @ 2023-02-24 19:20 Meetalone 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 常函数 在成员函数后加const称为常函数 常函数内部不能修改成员属性 成员属性声明时添加mutable后,在常函数中依然可以修改 2.常对象 声明对象时,在前面添加const称该对象为常对象,常对象只能调用常函数。 阅读全文
posted @ 2023-02-24 19:04 Meetalone 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 静态成员包括静态成员变量和静态成员函数,他们处于全局区,同时具有权限,因为他们不属于任何对象,所以可以直接使用类和作用域运算符直接访问。 静态成员变量 静态成员变量在类的内部声明,在类的外部初始化。 静态成员变量可以由静态成员函数访问,也可以由类对象访问 静态成员函数 静态成员函数只能访问类的静态成 阅读全文
posted @ 2023-02-24 17:45 Meetalone 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 类对象作为类成员的时候,我们需要考虑构造和析构的顺序。 有 class A 和 class B ,如果 class A 的对象作为 class B 的成员,在构造一个 B 的对象时,首相应该构造 A 的对象,让后再构造 B 的对象;而析构 B 的对象时,首相析构 B 的对象再析构A的对象。 阅读全文
posted @ 2023-02-24 17:05 Meetalone 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 浅拷贝:默认的拷贝构造函数实现的是浅拷贝,对于指针成员,浅拷贝编译器直接将指针的地址拷贝给新的对象,而不是将指针指向的内容指向新对象,这样在进行析构的时候就会多次释放导致崩溃。 深拷贝:为了解决浅拷贝的问题,我们通常进行手动的深拷贝,在堆中重新申请一块儿内存,然后将拷贝对象的内容复制进去,实现内容的 阅读全文
posted @ 2023-02-24 16:59 Meetalone 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 这里讨论两种情况下的拷贝函数调用: 作为参数传值过程中的拷贝函数调用,有一个Dog类,d1是Dog类的一个实例现在通过function将d1传入,void function(Dog dog); d1是dog的实参,在调用function的过程中产生了一个拷贝构造的调用,相当于Dog dog = Do 阅读全文
posted @ 2023-02-24 15:51 Meetalone 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 调用无参构造不能使用括号,编译器会判定这种写法为函数申明 构造函数除了一般的参数构造和默认的无参构造,还有拷贝构造注意拷贝构造的写法。假设有一个Dog类拷贝构造函数为Dog(const Dog &d);这样的构造函数就是拷贝构造函数。 匿名对象不能使用拷贝构造。假设存在一个Dog类实例d1,那么Do 阅读全文
posted @ 2023-02-24 14:41 Meetalone 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 封装是面对对象的三大特性之一,它是指将属性和行为作为整体来描述事物 封装通过关键词class将事物的属性和行为绑定在一起。 具体可以这样描述:当我们想要描述一只狗的时候,首先会想到他的外在特点,比如狗的品种,颜色,名字,体重等,这些都称作狗的属性;同时,狗能喝水,吃饭,还能撒娇,这些都是狗的行为。虽 阅读全文
posted @ 2023-02-24 11:43 Meetalone 阅读(28) 评论(0) 推荐(0) 编辑