首页 百科知识 ++继承机制下的构造函数

++继承机制下的构造函数

时间:2022-09-22 百科知识 版权反馈
【摘要】:在主函数中定义派生类的对象b,之后调用派生类的display函数,程序运行结果为:“The price of NoTitle is $0”。从这例1中,我们不难看出派生类在创建对象时会自动调用基类构造函数。如果像例1这种情况,派生类中没有新增成员变量,基类的构造函数功能已经满足派生类创建对象初始化需要,则派生类则无需重新自定义一个构造函数,直接调用基类构造函数即可。


#include<iostream>

using namespace std;


class book

{

public:

    book();

    book(char* a, double p = 5.0);

    void setprice(double a);

    double getprice()const;

    void settitle(char* a);

    char * gettitle()const;

    void display();

private:

    double price;

    char * title;

};


class book_derived :public book

{

public:

    void display();

};


book::book(char* a, double p) 

{

    title = a;

    price = p;

}


book::book()

{

    title = "NoTitle";

    price = 0.0;

}


void book::setprice(double a)

{

    price = a;

}


double book::getprice()const

{

    return price;

}


void book::settitle(char* a)

{

    title = a;

}


char * book::gettitle()const

{

    return title;

}


void book::display()

{

    cout<<"The price of "<<title<<" is $"<<price<<endl;

}


void book_derived::display()

{

    cout<<"The price of "<<gettitle()<<" is $"<<getprice()<<endl;

}


int main()

{

    book_derived b;

    b.display();

    return 0;

}

在本例中定义了book_derived类,该类没有自身的成员变量,类中所有成员变量都继承自book类,类中成员函数仅有一个display函数,该函数遮蔽了基类book中的display函数。在主函数中定义派生类的对象b,之后调用派生类的display函数,程序运行结果为:“The price of NoTitle is $0”。

从这例1中,我们不难看出派生类在创建对象时会自动调用基类构造函数。如果像例1这种情况,派生类中没有新增成员变量,基类的构造函数功能已经满足派生类创建对象初始化需要,则派生类则无需重新自定义一个构造函数,直接调用基类构造函数即可。如果派生类中新增了成员变量,这时如果需要在创建对象时就进行初始化则需要自己设计一个构造函数

#include<iostream>

using namespace std;


enum language{none, cpp, java, python, javascript, php, ruby};


class book

{

public:

    book();

    book(char* a, double p = 5.0);

    void setprice(double a);

    double getprice()const;

    void settitle(char* a);

    char * gettitle()const;

    void display();

private:

    double price;

    char * title;

};


class codingbook: public book

{

public :

    codingbook():book(){lang = none;}

    codingbook(language lang, char * t, double p);

    void setlang(language lang);

    language getlang(){return lang;}

    void display();

private:

    language lang;

};


book::book(char* a, double p) 

{

    title = a;

    price = p;

}


book::book()

{

    title = "NoTitle";

    price = 0.0;

}


void book::setprice(double a)

{

    price = a;

}


double book::getprice()const

{

    return price;

}


void book::settitle(char* a)

{

    title = a;

}


char * book::gettitle()const

{

    return title;

}


void book::display()

{

    cout<<"The price of "<<title<<" is $"<<price<<endl;

}


void codingbook::setlang(language lang)

{

    this->lang = lang;

}


codingbook::codingbook(language lang, char * t, double p):book(t,p)

{

    this->lang = lang;

}


void codingbook::display()

{

    book::display();

    cout<<"The language is "<<lang<<endl;   

}


int main()

{

    codingbook cpp;

    cpp.display();

    codingbook java(java, "Thinking in Java", 59.9);

    java.display();

    return 0;

}


免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈