类的继承相关问题
- 首先讨论一下类继承后的构造函数
- 自己写的play.h
#pragma once
#include <string>
using std::string;
class player
{
private:
string firstname;
string lastname;
bool hastable;
public:
player(const string & fn = "none", const string & ln = "name", bool bt = false);
void show();
};
class replayer : public player
{
private:
int rating;
public:
replayer(int r = 0, const string & fn = "none", const string & ln = "name", bool bt = false);
};
#include "player.h"
#include <string>
#include <iostream>
using std::string;
player::player(const string & fn, const string & ln, bool bt) : firstname(fn), lastname(ln),hastable(bt){}
void player::show()
{
std::cout << firstname << lastname << hastable <<std:: endl;
}
replayer::replayer(int r, const string & fn, const string & ln, bool bt)
{
rating = r;
}
#include <iostream>
#include "player.h"
int main()
{
std::cout << "Hello World!\n";
player hua;
player jin("jin", "zhe", true);
replayer jinzheyu(2, "jin", "zh ", true);
jin.show();
hua.show();
jinzheyu.show();
}
-
继承类在写构造函数的时候需要调用基类的构造函数,否则,将自动调用基类的默认构造函数,player.cpp注释处即为传参给基类的构造函数并调用的过程,注释后,将自动调用默认构造函数,此时fn,ln,bt无法传给基类,只能生成一个默认出来的对象,取消注释后可以正常传参并生成想要的对象。 -
取消注释后的结果 -
调用默认构造函数的结果 -
virtual 关键字使得基类的成员函数可以被重载,子类中相应函数调用基类的函数时需要加上作用域解析运算符,即基类名::函数名,以此调用其函数。 -
继承的时候最好写成虚析构函数,使得每个对象可以正确的调用其对应的虚构函数,否则在用指针与引用时引发问题。
|