c++第五章-(类与对象、构造器和析构器)

1.构造器与结构体的区别:构造器多支持方法。其作用有申请内存,初始化变量。

在c++中构造器没有返回值:语法Class Name();

2.析构器的作用:释放内存。

在c++中析构器没有返回值:语法~ClassName();

class Animal
{
public:
    std::string mouth;
    std::string name;

    void eat();
    void sleep();
    void drool();

    Animal(std::string theName);
};

class Pig:public Animal
{
public:
    void climb();

    Pig(std::string theName);
};

class Turtle:public Animal
{
public:
    void swim();

    Turtle(std::string theName);
};

void Animal::eat()
{
    std::cout << this->name << "会吃东西\n";
}

void Animal::sleep()
{
    std::cout << this->name << "会睡觉\n";
}

void Animal::drool()
{
    std::cout << this->name << "会流口水\n";
}

void Pig::climb()
{
    std::cout << this->name <<"会爬树\n";
}

void Turtle::swim()
{
    std::cout << this->name << "会游泳\n";
}

/**
 *  构造器,子类的构造器的值是通过改变父类的值的来的
 */
Animal::Animal(std::string theName)
{
    this->name = theName;
}

Pig::Pig(std::string theName):Animal(theName)
{

}

Turtle::Turtle(std::string theName):Animal(theName)
{

}

int main(int argc, const char * argv[])
{
    Animal animal("大动物");
    animal.eat();
    animal.sleep();
    animal.drool();

    Pig bigPig("小母猪");
    Turtle greenTurtle("小甲鱼");

    bigPig.climb();
    greenTurtle.swim();

    return 0;
}

控制台返回的结果:

大动物会吃东西
大动物会睡觉
大动物会流口水
小母猪会爬树
小甲鱼会游泳

2.继承情况下构造器和析构器的生命周期

class BaseClass
{
public:
    BaseClass();
    ~BaseClass();

    void doSomething();
};

class SubClass:public BaseClass
{
public:
    SubClass();
    ~SubClass();

};

void BaseClass::doSomething()
{
    std::cout << "父类做了某件事" << std::endl;
}

BaseClass::BaseClass()
{
    std::cout << "父类构造器\n";
}

SubClass::SubClass():BaseClass()
{
    std::cout << "子类构造器\n";
}

BaseClass::~BaseClass()
{
    std::cout << "父类析构器\n";
}

SubClass::~SubClass()
{
    std::cout << "子类析构器\n";
}

int main(int argc, const char * argv[])
{
    SubClass subclass;
    subclass.doSomething();
    std::cout << "完工" << std::endl;

    return 0;
}

控制台打印结果:

父类构造器

子类构造器

父类做了某件事

完工

子类析构器

父类析构器

3.class SubClass:private BaseClass//":private"说明只有SubClass该类可以使用基类的元素。

4.覆盖

class Animal
{
public:
    std::string mouth;

    void eat();
    void eat(int eatCount);
    void sleep();
    void drool();

    Animal(std::string theName);

protected:
    std::string name;
};

class Pig:public Animal
{
public:
    void climb();
    //overRide
    void eat();

    Pig(std::string theName);
};

class Turtle:public Animal
{
public:
    void swim();
    //overRide
    void eat();

    Turtle(std::string theName);
};

void Animal::eat()
{
    std::cout << this->name << "会吃东西\n";
}

void Animal::eat(int eatCount)
{
    /**
     *  OverLoad重载
     */
    std::cout << "饿了,该吃上" << eatCount << "碗饭" << std::endl;
}

void Animal::sleep()
{
    std::cout << this->name << "会睡觉\n";
}

void Animal::drool()
{
    std::cout << this->name << "会流口水\n";
}

void Pig::climb()
{
    std::cout << this->name <<"会爬树\n";
}

void Pig::eat()
{
    //overRide覆盖
    Animal::eat();
    std::cout << this->name << "在吃菜\n";
}

void Turtle::swim()
{
    std::cout << this->name << "会游泳\n";
}

void Turtle::eat()
{
    //overRide覆盖
    Animal::eat();
    std::cout << this->name<< "在吃海草\n";
}

/**
 *  构造器,子类的构造器的值是通过改变父类的值的来的
 */
Animal::Animal(std::string theName)
{
    this->name = theName;
}

Pig::Pig(std::string theName):Animal(theName)
{

}

Turtle::Turtle(std::string theName):Animal(theName)
{

}

int main(int argc, const char * argv[])
{
    Animal animal("大动物");
    animal.eat();
    animal.sleep();
    animal.drool();

    std::cout<< std::endl;
    std::cout<< std::endl;

    Pig bigPig("小母猪");
    bigPig.climb();
    Turtle greenTurtle("小甲鱼");
    greenTurtle.swim();

    std::cout<< std::endl;
    std::cout<< std::endl;

    //两个子类覆盖过的吃东西方法
    bigPig.eat();
    greenTurtle.eat();

    std::cout << std::endl;
    std::cout << std::endl;
    //重载吃东西的方法
    bigPig.Animal::eat(3);

    return 0;
}

控制台输出结果:

大动物会吃东西
大动物会睡觉
大动物会流口水

小母猪会爬树
小甲鱼会游泳

小母猪会吃东西
小母猪在吃菜
小甲鱼会吃东西
小甲鱼在吃海草

饿了,该吃上3碗饭

5.继承下来的子类不能对继承下来的方法进行重载overLoad

c++第五章-(类与对象、构造器和析构器)

时间: 2024-08-25 09:34:43

c++第五章-(类与对象、构造器和析构器)的相关文章

继承机制中的构造器和析构器

正如此前所讲解的,C++支持程序员自己写出将创建或销毁一个对象时自动调用的方法,也就是构造器和析构器. 在没有继承机制的情况下,我们很容易理解这些方法在创建或销毁一个对象的时候被调用.但是一旦使用了继承机制,构造器和析构器就变得有点复杂了. 比如基类有个构造器,如Animal(),它将在创造Pig 类型的对象时最先被调用,如果Pig类也有一个构造器,它将排在第二个被调用.因为基类必须在类之前初始化原则! 然后我们继续讨论:如果构浩器带着输入参数,事情变得稍微复杂了. class Animal{

JavaSE学习笔记(五)——类与对象

一.  类和对象 1.1           面向对象与面向过程的区别 1.面向过程 采用面向过程必须了解整个过程,每个步骤都有因果关系,每个因果关系都构成了一个步骤,多个步骤就构成了一个系统,因为存在因果关系每个步骤很难分离,非常紧密,耦合度高,当任何一步骤出现问题,将会影响到所有的系统.如:采用面向过程生产电脑,那么他不会分CPU.主板和硬盘,它会按照电脑的工作流程一次成型. 2.面向对象 面向对象对会将现实世界分割成不同的单元(对象),实现各个对象,如果完成某个功能,只需要将各个对象协作起

Java 第七章 类和对象 笔记

一.对象的特征--类的属性 每个对象的每个属性都有特定的值 对象的操作--类的方法 二.封装:对象同时具有属性和方法两项特性.     对象的属性和方法通常被封装在一起,共同体现事物的特性,     二者相辅相成,不能分割. 三.类和对象的区别:     类:抽象的概念,是一个模子,确定了对象的属性和方法.    对象:能够看得见摸得着的实物.具有静态和动态特征. 四.定义类的步骤:     1.定义类名      2.定义类的属性 访问修饰符 属性类型 属性名称=默认值:     3.定义类的

第五节 类和对象

面向对象怎么理解? 1.1 面向对象是相对面向过程而言 1.2 面向对象和面向过程都是一种思想 1.3 面向过程:强调的是功能行为 1.4 面向对象:将功能封装进对象,强调具备了功能的对象 1.5 面向对象是基于面向过程的 特点: 三个特征:封装.继承.多态 我们在开发过程中,就是在找对象进行使用,没有对象就new一个对象. 找对象:建立对象,使用对象,维护对象的关系 封装: (1)是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. (2)好处:将变化隔离:便于使用:提供重用性:提高安全性

《Java入门第二季》第一章 类和对象

什么是类和对象 如何定义 Java 中的类 如何使用 Java 中的对象 Java中的成员变量和局部变量1.成员变量:在类中定义,描述构成对象的组件.2.局部变量:在类的方法中,用于临时保存数据.3.成员变量的有效范围:类中的所有方法都可以调用成员变量.4.局部变量和成员变量允许重名,这个时候局部变量具有更高优先级. Java 中的构造方法1.若不自己写构造方法,Java会默认给一个无参的构造方法.但若是自定义了构造方法,不论有无参数,系统默认给的无参构造器都会失效.2.写构造器的时候可以顺便检

Java 核心技术 第四章 类与对象

类:构造对象的模板和蓝图.由类构造对象的过程称为创建类的实例. 对象的特征: 对象的行为 对象的状态 对象的标识 类之间的关系: 依赖 聚合 继承 对象与对象变量: new Date() new GregorianCalendar() new GregorianCalendar(1999, 11, 31) new GregorianCalendar(1999, Calendar.DECEMBER, 31) new GregorianCalendar(1999, Calendar.DECEMBER

JAVA入门第二季 第一章 类和对象

面向对象编程 Object Oriented Programming OOP 第一.什么是类和对象 在具体说明类和对象之前,先说说别的. 眼睛在人类身体上最为有用的器官.如果一个没有了眼睛,这个人与世界的联系会大大减小.因为人脑主要是通过眼睛来获取数据的:当然也有其它器官获取的哦数据帮助我们更加准确的描述我们所看到的现象.眼睛通过光线作用,把客观物理世界投影到人脑.人脑是由亿万多脑细胞组成.脑细胞神经元有反馈机制,当级联的脑脑细胞神经元多起来后,通过反复的实验和检测,使得大脑得到对客观世界有更准

第十一章 类和对象

一.本章技能目标 掌握类和对象 理解封装 会创建和使用对象 二.内容 1 对象 分类是人们认识世界的一个很自然的过程,在日常生活中会不自觉地进行分类 什么是对象,对角是用来描述客户事物的一个实体 Java是一种面向对象的编程语言 1.1 身边的对象 用向对象方法来解决问题是,首先要对现实世界中的对象进行分析与归纳,找出哪些对象与要解决的问题是相关的 对象都有一些特征,这些特征是有别于其他对象 所以对象由特征和操作组成 1.2 对象的属性和方法 在面向对象的编程思想中,把对象的静态特征和动态特征分

第四章 类与对象

一.面对对象编程的三个特性 封装性:经数据和对数据的操作封装在一起.通过抽象,从实例中抽取共同性质形成一般概念,例如类. 继承:子类可继承父类的属性和行为,继承父类所具有的数据和数据上的操作,同时增添子类独有的数据和数据上的操作. 多态:一是操作名称的多态,多个操作具有相同名字,这些操作所接受的消息必须不同:二是和继承有关的多态,同意操作被不同对象调用时产生不同行为. 二.类声明 类是JAVA程序的基本要素,JAVA应用程序有若干类组成,类声明的变量为对象变量. 类的定义两部分:类声明.类体 c