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++第五章-(类与对象、构造器和析构器),布布扣,bubuko.com

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

上一篇:C#反射从入门到放弃(这部分遇到的新东西太多了让人接受不能)


下一篇:Javascript操作文件