<C++程序设计>访问权限,虚函数,继承

派生类访问权限

派生类对象的体积 = 基类对象的体积 +派生类对象自己的成员变量的体积 ,派生类对象包含着基类对象,积累对象存储的位置位于派生类对象新增的成员变量之前

C++类和结构体中缺省的为私有成员

类的成员函数以外的地方,只能访问该类对象的公有成员

通过public成员函数,可以通过参数访问类的私有成员变量

class cDog;

Class cMaster {

cDog dogs[10];

}

Class cDog{

cMaster m;

}

//循环定义计算不出体积大小,为了避免循环定义,为“业主”类设置一个“狗”类的对象指针数组

class cMaster{

cDog *dogs[10];//10个元素的指针数组,每个元素都是一个指针,字节数就是40个字节

}

基类和派生类有同名函数的情况下

base::i = 5;//访问基类的成员变量

base::func();//基类的成员函数

基类的private成员可以被

1.积累的成员函数访问

2.基类的友元函数访问

派生类的成员函数可以访问当前类对象的基类的保护成员

class Father{

protected:

int nProtected;

}

class Son:public Father{

void AccessFather(){

nProtected =1;//ok,访问从基类继承的Protected成员

Son s;

s.nProtected =1; //wrong,s不是AccessFather所属的对象,不是当前继承基类的对象

}

}

Base(int i):n(i){} //构造函数就是用i初始化n的值

执行派生类的构造函数之前:调用基类的构造函数

1、初始化派生类从基类继承的成员

2,调用成员对象类的构造函数

3,初始化派生类对象的成员

public继承的赋值兼容原则

class base{};

class derived:public base{};

base b; derived d;

1.派生类对象可以赋值为基类对象

b =d ;

2.派生类对象可以初始化为基类的引用

base &br = d;

3.派生类对象的地址可以赋值给基类的指针

base *pb = &d;

如果派生方式是private,protected,以上3条不行

虚函数

virtual关键字只用在类定义的函数声明中,写函数体时不用

构造函数和静态成员函数不能是虚函数

虚函数和普通函数的本质差别是:虚函数参与多态,普通函数不能

Class 派生类名 :继承方式1(访问权限) 基类名1 ,继承方式2(访问权限) 基类名2

多态:在运行的过程中根据函数的参数类型,确定调用哪一个函数

virtual 使speak成为虚函数,实现基类指针访问派生类成员函数

virtual的用途是:实现运行时的多态性,通过基类指针访问派生类同名覆盖函数

应通过指针或引用调用虚函数,而不是以对象名来调用虚函数

在派生类中重新定义基类的虚函数仍为虚函数,同时可以省略virtual关键字

将不用来声明(实例化)对象的类称为抽象类,只供继承

抽象类又可以定义成:至少包含一个纯虚函数的类

面向对象:采用对象来描述内部属性和操作方法,将数据和函数当做一个整体

继承:在...的基础上,又有什么样的新特征

destructor往往用于释放constructor中动态申请的内存空间

所有对象中的成员函数共用一个存储空间,在代码区存放

class base{

virtual int get();

}

int base::get(){};

纯虚函数的定义:

纯虚函数:一点都不务实全虚的,没有函数体的虚函数在当前类什么都做不了

virtual 返回类型 函数名(参数表) = 0,具体实现只能在派生类中完成

virtual double Area() = 0;

连函数体都没有的虚函数就是纯虚函数,这类对象一般是抽象的概念,比如shape类,没有面积不需要打印信息

虚函数是应在派生类中重新定义的成员函数。 当使用指针或对基类的引用来引用派生的类对象时,可以为该对象调用虚函数并执行该函数的派生类版本。

在构造和析构函数中调用虚函数不是多态,初始化时子类先调用基类的构造函数,此时,子类还未被初始化不能是多态

抽象类:包含纯虚函数的类

1.不能创建对象

2.只能作为基类派生新类使用

3.抽象类的指针和引用指向派生出的新类的对象

如果从一个抽象类派生而来,它实现了基类中 所有加{}的纯虚函数,才能身份转变成为非抽象类

Class Base{

public:

int i;

virtual void print(){

cout<<"Base Print"<<endl;

}

}

sizeof(Base) =8;//不是4,猜猜为什么?

每一个有虚函数的类都有一个虚函数表,该类的对象放着虚函数表的指针,虚函数表中列出了该类的虚函数地址,多出的4个字节就是用来存放虚函数地址的,通过虚函数表可以查询函数在内存中的地址,调用函数就是跳到内存地址上去执行

int main(){

CSon *p =new CGrandson;

delete p;//指针指向CSon,只会调用CSon的析构函数,派生类无法被调用内存不释放,怎么解决呢?

}

把基类的析构函数声明为virtual,派生类析构函数可以不声明,通过积累的指针删除派生类对象时,先调用派生类的析构函数,再调用基类的析构函数,类如果定义了虚函数,最好将析构函数定义成虚函数,不允许虚函数作为构造函数

构造函数:名字和类名相同,可以有参数,不能有返回值

对象占用的存储空间是不是构造函数分配的?
构造函数是在对象已经占用的存储空间做一些初始化的工作,如果把对象比作房子,构造函数不是盖房子只是进行装修

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,513评论 1 51
  • C++虚函数 C++虚函数是多态性实现的重要方式,当某个虚函数通过指针或者引用调用时,编译器产生的代码直到运行时才...
    小白将阅读 1,734评论 4 19
  • 一个博客,这个博客记录了他读这本书的笔记,总结得不错。《深度探索C++对象模型》笔记汇总 1. C++对象模型与内...
    Mr希灵阅读 5,577评论 0 13
  • Introduction to C++ (Season 1) Unit 1: Overview of C++ 第1...
    我是阿喵酱阅读 2,745评论 0 7
  • 先在纸上画线稿,然后在手机上上色。 用美图调了下颜色,然后加上白色边框。 想给画很有哲理的句子,想不出来,大家有什...
    柠小朵阅读 365评论 6 7