XCoderLiu's Blog

An iOS developer @ Tencent

吾生也有涯,而知也无涯!


我的 Github

C++ 内存布局&虚函数

关于c++的内存布局

比如我们写这样一个简单的代码

class Parent
{
public:
	Parent(){}
	~Parent(){}
	void Say() { cout << "Parent" << endl; }
protected:
	
private:
};

class Son:public Parent
{
public:
	Son() {}
	~Son() {}
	void Say() { cout << "Son" << endl; }
protected:

private:
};
int main()
{
	Parent *p = new Son;
	p->Say();
	getchar();
    return 0;
}

很显然这个程序的输出是 Parent 因为我们用基类的指针指向超类的时候,因为是普通成员函数所以父类指针只能访问到父类的存储空间。这时候我们调用 Say 方法就只会调用父类的方法。

虚函数

然后我们只要在稍微改动下代码

class Parent
{
public:
	Parent(){}
	~Parent(){}
	virtual void Say() { cout << "Parent" << endl; }
protected:
	
private:
};

结果就完全不一样了,因为加上了虚函数的关键字后,只要子类进行重载不管写没写 virtual 关键字都是会对应在续表中生成虚函数。所以这时候即使是父类指针指向子类的实例,通过虚函数重载虚函数表将被覆盖的话调用的依然是子类的方法,输出就是 Son

最近的文章

Yosemites dark mode

检查Dark模式的代码如下:NSDictionary *dict = [[NSUserDefaults standardUserDefaults] persistentDomainForName:NSGlobalDomain];id style = [dict objectForKey:@"AppleInterfaceStyle"];BOOL darkModeOn = ( style && [style isKindOfClass:[NSString class]] &am...…

OSX继续阅读
更早的文章

算法学习-初级探索

学习目的学习算法其实不是说算法存在一个唯一的标准答案,而是面试或者工作中我们我们能够针对具体业务能够提供更合理的解决方案。如何针对业务选择算法(举个🌰)针对一个数组排序的情况 如果数组含有大量重复的元素 – 推荐三路快排 如果数组近乎有序 – 推荐插入排序 如果数组取值范围有限 – 推荐计数排序 如果需要稳定或者存储结构是链表 – 推荐归并排序 如果可以使用的内存空间较小 – 考虑外排序…

algorithm继续阅读