前言
这篇文章会带您了解c++中继承的权限问题和构造函数的写法注意!
ps:本文只讲了单继承,但是多继承也是同理,如果需要,可以留言,我会出一个多继承
提示:以下是本篇文章正文内容,下面案例可供参考
一、c++继承是什么?
继承中我们要认识两个东西,一个是父类(也叫作基类),一个是子类(也叫作派生类)
首先父类会被子类所继承,继承有三种方式继承,这也是类中public,protected,private的区别
继承允许子类成员的属性和父类的方法或重新定义,附加的属性和方法等。
二、使用步骤
1.如何创建一个子类
代码如下(示例):
class MM
{
public:
int mm1;
protected:
string name;
};
class Boy:public MM
{
public:
protected:
};
2.访问子类的数据
代码如下(示例):
int main()
{
Boy boy;
cout<<boy.mm1<<endl;
}
注意:类外只能访问public继承下来的数据
无论是public,protected,private子类都会继承,但是权限的不同,效果不同
3.protected与private的区别
protected和private一样不能在类外访问,但是protected的继承方式可以被子类访问,而private不可以
代码如下(示例):
class MM
{
public:
int a;
protected:
int b;
private:
int c;
};
class Boy:protected MM
{
public:
void print()
{
cout<<a<<b<<endl;//不能访问c
}
protected:
};
class Son:private MM
{
public:
void print()
{
cout<<"NO DATA "<<endl;//不能访问a,b,c
}
protected:
};
注意: 什么样的继承方式决定了,继承下来的成员函数和数据的权限
权限只会更加严谨不会更加宽松
是从public->protected->private 的转换方式
不会颠倒过来,不可能用public继承,父类的private里面的数据还是private
4.继承的构造函数
单继承构造函数写法
1.子类的构造函数必须要用父类的构造函数,因为继承下来的属性,只能通过父类的构造函数进行初始化
2.子类的构造函数 初始化父类的属性的时候,必须采用初始化参数列表的方式进行初始化
3.如果你不想写构造函数,缺省的写法,就是在父类写一个无参构造函数
4.当父类没有无参构造函数的时候,子类的构造函数必须显示的用初始化参数列表调用父类的构造函数
代码如下:
class MM
{
public:
MM(string name, int money):name(name),money(money)
{
cout << "调用父类的构造函数" << endl;
}
/*MM()
{
cout << "父类的无参构造函数" << endl;
}*/
protected:
string name;
int money;
};
class Boy :public MM
{
public:
Boy(string boyname, string name, int money):MM(name,money)
{
this->boyname = boyname;
}
void print()
{
cout << boyname << "\t" + name << "\t" << money << endl;
}
protected:
//string name;
//int money;
string boyname;
};
class Girl:public Boy
{
public:
Girl(string name,int money,string boyname):Boy( boyname,name,money){}
protected:
//string name;
//int money;
//string boyname;
};
int main() {
Boy boy1("陈", "mm", 100);
boy1.print();
MM mm1("MM", 200);
Girl mm2("女神", 500,"男孩");
mm2.print();
return 0;
}
注意点:
No.1 继承具有继承性!血脉 一直在,所有一个类不会被继承很多次,一个类也不会继承太多父类
当然如果你忙的过来你随意~_~
No.2 采用私有继承可以避免一个类被其他类继承使用
总结
对于c++的单继承就这么多
总结一下就是:
1.注意权限问题
2.注意构造函数的写法
3.其实还需要注意同名的问题,但是留在下一个文章里说吧。
如果这篇文章帮助到了你,还请您关注一下,因为我和您将彼此成长,我们都会成为大牛!