C++小结(二)(《后台开发核心技术与应用实践》第二章笔记)

1类的封装性:数据隐藏和提供访问接口;将数据和操作(即函数)封装在类里。
2构造函数:处理数据成员的初始化;名字必须与类名相同。
3析构函数:在对象声明周期结束时自动执行,作用不是删除函数而是在撤销对象占用的内存前完成一些清理工作,不限于释放资源,也可用于执行用户希望在最后一次使用对象之后所执行的任何操作。
static局部对象在函数调用结束时对象不释放,不执行析构函数,只有在main函数结束或调用exit()函数结束程序时,才调用static局部对象的析构函数。
用new建立的对象,用delete释放该对象时会调用该对象析构函数。
4静态数据成员:在类的内部声明,类外定义,被类的所有对象共享,包括该类的派生类对象。

class base{
public:
static int var;
};
int base::var=10;

只声明了类而不定义对象,类的一般数据成员不占内存空间,如果在类中定义了静态数据成员,会为他分配空间。
5静态成员函数:

static int volume();
Box::volume()//类外调用
a.volume();//允许通过对象名调用

作用是为了能处理静态数据成员,静态成员函数没有this指针,因为不属于任何对象,无法对非静态数据成员进行访问。
6对象的存储空间:
C++中每个空类型的实例占1Byte 空间。
成员变量占对象存储空间;静态数据成员,成员函数,构造函数,析构函数不占对象内存空间。

#include <iostream>
using namespace std;
class A{
};
class B{};
class C:public A{
};
class D:public virtual B{
};
class E:public A,public B{
};
int main()
{
A a;
B b;
C c;
D d;
E e;
cout<<sizeof(a)<<endl;
cout<<sizeof(b)<<endl;
cout<<sizeof(c)<<endl;
cout<<sizeof(d)<<endl;
cout<<sizeof(e)<<endl;
return 0;
}
结果是:
1
1
1
8
1

单一继承与多重继承空类空间都是1,虚继承是8,因为涉及虚指针。
9this 指针
指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址。
只在成员函数中使用,在成员函数开始前构造,结束后清除。
10类模板:

template<class T>
class Operation{
public:
Operation (T a,T b):x(a),y(b){}
T add(){
return x+y;
}
T subtract(){
return x-y;
}
private:
T x,y;
};
T Opeation <T> :: add(){
return x+y;
}//类外定义成员函数 

11继承派生略过。
12多态性:具有不同功能的函数可以用同一个函数名。
13虚函数:允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。

#include <iostream>
#include <cstring>
#include <string>
using namespace std;
class Box{
public:
    Box(int,int,int);
    virtual void display();
protected:
    int length,height,width;
};
Box::Box(int l,int h,int w){
length=l;
height=h;
width=w;
}
void Box::display(){
cout<<"length:"<<length<<endl;
cout<<"height:"<<height<<endl;
cout<<"width:"<<width<<endl;
}
class FilledBox:public Box{
public:
    FilledBox(int,int,int,int,string);
    virtual void display();
private:
    int weight;
    string fruit;
};
void FilledBox::display(){
cout<<"length:"<<length<<endl;
cout<<"height:"<<height<<endl;
cout<<"width:"<<width<<endl;
cout<<"weight:"<<weight<<endl;
cout<<"fruit:"<<fruit<<endl;
}
FilledBox::FilledBox(int l,int h,int w,int we,string f):Box(l,h,w),weight(we),fruit(f){}
int main()
{
    Box box(1,2,3);
    FilledBox fbox(2,3,4,5,"apple");
    Box *pt=&box;
    pt->display();
    pt=&fbox;
    pt->display();
    return 0;
}

length:1
height:2
width:3
length:2
height:3
width:4
weight:5
fruit:apple
pt是同一个基类指针,也可以调用同一类族中不同类的虚函数。
如果基类中的display()不是虚函数,无法通过基类指针调用派生类对象中的成员函数的。
C++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数自动成为虚函数。
非多态行为:在基类中中定义的非虚函数,在派生类中重新定义,如果用基类指针调用该成员函数,则系统调用的是基类成员函数;如果用派生类指针调用该成员函数,则系统会调用派生类对象中的成员函数。
14纯虚函数:在基类中没有定义只作声明的虚函数,要求任何派生类都要定义自己的实现方法。
含有纯虚函数的类被称为抽象类,不能生成对象,但可以声明指针。
构造函数不能声明为虚函数,因为必须明确知道类型才能正确生成对象;析构函数可以声明为虚函数
15单例模式:保证在整个应用程序的生命周期中的任何一个时期,单例类的实例只存在一个。

#include <iostream>
#include <cstring>
#include <string>
using namespace std;
class CSingleton{
private:
    CSingleton(){
    }
    static CSingleton *m_pInstance;
public:
    static CSingleton *GetInstance(){
    if(m_pInstance == NULL)
        m_pInstance = new CSingleton();
    return m_pInstance;
    }
};
CSingleton * CSingleton::m_pInstance=NULL;
int main()
{
    CSingleton *s1=CSingleton::GetInstance();
    CSingleton *s2=CSingleton::GetInstance();
    if(s1==s2)
        cout<<"s1=s2"<<endl;
    return 0;
}

s1=s2
单例类CSingleton有以下特征:
(1):有一个指向唯一实例的静态指针m_pInstance,并且是私有的;
(2):有一个公有的函数,可以获取这个唯一的实例,并且在需要的时候创建该实例;
(3):其构造函数是私有的

后台开发核心技术应用实践 作者:徐晓鑫 著 出版日期:2016年08月06日 封面宣传语:腾讯云平台技术总监黄世飞、Facebook对外支付项目主程张子兴、微软软件工程师彭可竞、阿里巴巴资深算法工程师周乐、百度大数据高级测试工程师畅晋联袂推荐;围绕后台开发需要掌握的核心技术,从多个方面、多个角度进行了阐述,覆盖了该领域的几乎所有内容;充分抓住本质并结合实践,文字通俗易懂,可操作性强 出版书名:后台开发核心技术应用实践 作者:徐晓鑫 著 封底文字 专家评价 后台开发是一个“历史悠久”的领域,同时也是一个沉淀深厚,高技术价值的领域。本书清晰、严谨、务实的风格显示出晓鑫对该领域知识的深刻理解。 ——张子兴 Facebook对外支付项目主程,美国加州MenloPark 每一位从事后台开发的专业人士都需要一本后台开发指南。对每一位想要认真从事该领域工作的人来说,本书是一本绝对必读的书籍。 ——彭可竞 微软软件工程师,美国华盛顿州Redmond 本书是作者多年后台开发、架构和研究的精华。书中用通俗的文字、详尽的示例代码,结合实际工作中的案例,讲述了后台开发方方面面的知识,内容丰富。对于从事后台开发的人员,这是一本很好的由浅入深的学习书籍。 ——周乐 阿里巴巴资深算法工程师,北京望京 使用C++语言进行后台开发有一定的门槛,本书可以很好地帮助你跨过这个“门槛”。 ——畅晋 百度大数据高级测试工程师,北京上地 前勒口 互联网网民日益剧增,各种应用层出不穷,各项技术更新不断。单是游戏行业,近几年就经历了从端游、页游到手游的巨大变迁,客户端更新迭代之快,始料未及。而后台开发中使用到的技术,却变化不是很大。让服务性能更高、处理能力更强、安全性更好,是后台开发工程师永恒的主题。 后台开发中用到的技术,深而广,需要读的“大部头”很多,光是Richard Stevens的APUE,UNP,TCP/IP详解就够读个半年以上。读者通过阅读本书,可以从实践出发,快速由浅入深地进入后台开发领域。在读完本书,有了实践的经验之后,再去阅读大师们的著作,会更有体会,更懂得如何欣赏。 读书的最高境界莫过于“把书读薄,把书读厚”。本书文字通俗易懂,让你更快地“读薄”,同时又涉及较多的核心知识点,顺着这些知识点,读着读着也发觉“读厚”了。 后勒口 徐晓鑫,腾讯资深软件研发工程师,先后在腾讯游戏之洛克王国、QQ会员、QQ秀等项目工作,精通后台开发各种技术,实战经验丰富。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值