北京大学C++慕课
C++学习笔记
倾听雪的声音
这个作者很懒,什么都没留下…
展开
-
继承派生(只考虑public继承)以及多态
一、继承和派生 class B:public A { }; B继承自A, B是A的派生。派生类拥有基类的全部成员函数和成员变量,但基类的private成员,派生类无法访问(因此可以将派生类定义成基类的友元类,友元关系不具有传递性和继承性),基类的protected成员:派生类的成员函数可以访问当前对象的基类的保护成员。保护成员就是为了继承而生的,其它访问限制与private一样。 关于构造函数问题以及写在构造函数一章 继承与成员对象的区别: 无论是B继承A,还是在B中定义一个A类的对象,都可以实现在B类对原创 2020-06-16 17:22:59 · 365 阅读 · 0 评论 -
运算符重载
运算符重载实质上是函数的重载,作用于C++基本数据类型的运算符本来就是函数,我们是重载这些函数,不是只给某字符赋予一些功能。 我们重载运算符,可以改变运算符原本操作数的类型(操作数其实就是函数参数),但不能改变操作数的个数,以及运算符的优先级。也就是说不能像我们平时重载函数时那么随便。 单目运算符我们重载时只能传一个参数,双目只能传两个。注意成员函数自带一个参数——this指针。 有些运算符可以重载为成员函数,也可以重载为普通函数,也可以重载为友元函数。好像有个规律,操作数顺序是,有this指针就是this原创 2020-06-15 15:58:46 · 223 阅读 · 0 评论 -
const、static(含extern)、this用法总结
一、const 关键字 1、定义常量(定义函数参数时使用最重要) const 数据类型 = 值;如: 2、定义常量指针(定义函数参数时使用最重要) 3、定义常引用(定义函数参数时使用最重要) 4、定义常成员函数 ...原创 2020-06-15 13:56:52 · 220 阅读 · 0 评论 -
析构函数
对象生存期结束时会主动执行析构函数,摧毁对象。主动调用析构函数并不会摧毁对象,反而容易造成多次delete内存的情况,所以不要主动调用析构函数。 函数运行结束时,在退栈时会摧毁对象。但new出来的对象,由于保存在堆区,不会随着函数退栈而释放,需要主动delete,这时也会调用析构函数。 以下程序实例化了几个对象,调用了几次析构函数 int main() { A* p0; A* p1=new A[2]//A是类 A* p2=new A; A a; delete[] p1; } new了3个对象,直接定义了一个原创 2020-06-14 15:37:58 · 261 阅读 · 0 评论 -
C++构造函数(详细)
一、普通类的构造函数 class A { int a,b; public: A(){cout<<"默认构造函数"<<endl;}//自己定义的默认构造函数,什么也不坐 A(int x):a(x){cout<<"转换构造函数1"<<endl;}//转换构造函数1 A(int x,int y):a(x),b(y){cout<<"转换构造函数2"<<endl;}//转换构造函数2 A(A& _A){ a=_原创 2020-06-14 15:00:13 · 14465 阅读 · 2 评论 -
C++类的访问权限范围问题
一、private成员 分为私有成员变量和私有成员函数。 1、私有成员变量可被类的成员函数、类的友元函数、类的友元类、同类对象的成员函数访问。(私有变量依托于对象存在,访问也是通过对象访问的,只不过成员函数中省略了this指针) class A { int a; public: void seta(int x) { //类的成员函数访问私有成员变量a(对象访问自己的私有成员) this->a = x;//“指针->成员”=“(*指针).成员” } void geta(A&原创 2020-06-12 11:02:54 · 257 阅读 · 0 评论 -
C++在类中重载 = 时,要返回类的引用
class complex { public: double real, imag; complex() { cout << "默认构造函数" << "\n"; } complex(double r,double i):real(r),imag(i){ cout << "转换构造函数" << "\n"; } complex(complex&c) { real = c.real; imag = c.imag;原创 2020-06-11 14:54:59 · 221 阅读 · 0 评论