摘要:
https://leetcode.com/problems/container-with-most-water/ 给出一堆数,是一个一维向量上的高。求出左右两个数作为高度,最大的装水的面积。 第一种,最笨的办法,就是 轮询,o(n^2)的搜索。 一个指针指向左侧,一个指向右侧,通过枚举出所有的组合,
阅读全文
posted @ 2019-03-28 10:55
newbird2017
阅读(118)
推荐(0)
摘要:
可以看到,第一次调用的是B的f(),第二次我们交换了虚表中的内容,这样发生多态的时候,实际调用的函数是A::f()。
阅读全文
posted @ 2019-03-27 15:20
newbird2017
阅读(125)
推荐(0)
摘要:
class A{ public: virtual void f(){ cout f(); //发生了多态,这里调用的是B::f()。因为有upcast,所以是多态。 a = b; //这里只是完成了一个赋值操作 p = &a; p->f(); //调用的是A::f() return 0; }
阅读全文
posted @ 2019-03-27 14:12
newbird2017
阅读(119)
推荐(0)
摘要:
多重继承情况下,看父类有没有虚函数。 sizeof(A) = 8 sizeof(B) = 8 sizeof(C) = 16 在我的64位机器上这个结果。也就是,保存了两个虚表。 接下来这种,sizeof(A) = 8, sizeof(B) = 1, sizezof(C) = 8。只保存了一个虚表。
阅读全文
posted @ 2019-03-27 10:42
newbird2017
阅读(138)
推荐(0)
摘要:
A()B()~A() 可以看到这种情况下,非虚函数的话,B被当做A看待,只调用了A的析构函数。 如果加上virtual,就会不一样了。 调用过程变成: A() B() ~B() ~A() 为什么这么说,因为首先,这是多态,那么会调用B的析构函数。 同时,因为是析构,所以一定会调用到父类的析构函数。?
阅读全文
posted @ 2019-03-26 17:39
newbird2017
阅读(157)
推荐(0)
摘要:
class D:public C{ public: D(){cout << "D()" << endl;} virtual ~D(){ cout << "~D()"<<endl;} }; class E:public D{ public: E(){cout << "E()" << endl;} virtual ~E(){ cout...
阅读全文
posted @ 2019-03-26 17:07
newbird2017
阅读(140)
推荐(0)
摘要:
A::get_p() 说明,成功的调用了
阅读全文
posted @ 2019-03-26 16:36
newbird2017
阅读(114)
推荐(0)
摘要:
func ptr is 8 int ptr is 44197204 4197218 4197232 4197282 4197296 4197232 可以看到,第一个和第二个不一致,第三个是一样的。
阅读全文
posted @ 2019-03-26 16:13
newbird2017
阅读(117)
推荐(0)
摘要:
1、严格上说,必须与原来的类型是完全相同的 2、放宽一些,可以返回 原来的返回的类型的 子类的指针或引用。 比如 但是,协变类型也是可以接受的。仅仅是子类的 指针 或 引用。 同时需要注意,返回值可以是协变,但是传入的参数不能协变。
阅读全文
posted @ 2019-03-26 15:48
newbird2017
阅读(461)
推荐(0)
摘要:
只有用指针和引用,才会动态绑定。才会在运行时候从虚表中找对应的成员函数。 如果只是用.访问成员函数,是静态绑定,在编译时刻就固定好的。 另外,父类的虚函数,子类不管加不加virtual关键字,都是虚函数。最好加上。 同样的,用指针和引用,访问普通函数的时候,不会发生多态。多态的两个条件,缺一不可。
阅读全文
posted @ 2019-03-26 14:57
newbird2017
阅读(139)
推荐(0)