C++面向对象编程

一.类的大小:A a; 求sizeof(a)

1.空类的大小是1

2.sizeof(a) = 非静态数据成员的大小 + v_ptr(指向虚函数表的指针) + 虚继承时一个指向基类的指针

3.其他成员函数也在内存中,保存在代码段

参考:http://tudian2007.blog.163.com/blog/static/3156641320132178319185/


二.类的const成员

2.1 const数据成员 :必须在类的构造函数的初始化列表中初始化

必须在类的初始化列表中初始化的变量(4种): const (常数)/&(引用)/没有默认构造函数的类类型/派生类初始化基类

2.2 const函数成员 :不可修改类的数据成员(mutable标识可以被const函数修改)

不能用const 修饰构造函数


三.友元函数

只是普通函数,不属于类。可以访问类的proteted/private/public成员

友元关系不具有继承性,传递性


四.static成员

static成员不属于类,static函数没有this指针

stratic成员类体外定义


五.继承与虚函数

1.oop: 数据抽象  (类实现)

        继承           (类派生实现)

        动态绑定      (虚函数,基类指针调用虚函数)


继承中的内存分配:

  基类保存自己的数据结构,

 派生类保存基类+自己的数据结构。

 虚函数一直保存在基类中。

例如:

class A{

public :

  int a;

virtual print(){};

}


class B:public A{

public:

int b;

print(){};

}

内存中:class A保存这 B::print()   +a

class B保存   B::a+B::b


2.继承关系中关键字的作用域

public:        类本身+派生类+类的对象  均可以访问

protected:  类本身+派生类                    可以直接访问

private:       类本身                                   可以访问


public 继承:      基类中的关键字不变

protected继承: 基类中的public变成派生类的protected成员

private继承:      基类中public/protected成员变成派生类的privated成员



3.成员函数的覆盖

派生类重载基类的函数后,不能直接用派生类的指针调用基类的函数

例如:

 class A{

public:

int add(){ }

}

class B: public A{

public:

int add(int a, int b) {return a+b;}

}

B *b= new B;

b->add(1,2);  //OK

b->add();      //ERROR

b->A::add();  //OK


4.自动转换

基类指针 不能直接转成派生类

派生类指针可以转成基类


5.虚函数

除构造函数外,任意非static成员函数都可以是virtual

通过虚函数表,记录虚函数的地址

参考: http://coolshell.cn/articles/12165.html



6.纯虚函数

int add() =0;  =0标识为纯虚函数

不能为纯虚函数的类创建对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值