1,c++是可以多继承的语言,也就是一个子类可以有几个父类,你问我c++没接口吗,答案是有。
2关于继承方面的一些常识:
当被传值的是一个实体对象时,如果绑定的是子类,则不关父类的函数是否是虚函数,改对象调用同名函数时都说默认父类的。
当传值的是一个地址时,如果绑定的是子类,如果父类的函数是非抽象函数,则调用同名函数时默认用父类的。
#include
using namespace std;
class father {
public:
int a;
string c;
public: void cry() {
cout << "哇哇哇1" << endl;
}
void cry1() {
cout << "哇哇哇2" << endl;
}
father() {
}
father(int A, string C) {
a = A;
c = C;
}
~father() {
}
};
class son : public father {//子类要想调用父类的成员变量和方法时必须在继承时保证父类的public。
public:void cry() {
cout << "哇哇哇3" << endl;
}
int b;
};
class base {
};
int main()
{
son son1;
son1.cry();//正常的子类调用子类自己的函数
son a2;
father a1 = a2;//当被传值的是一个实体对象时,如果绑定的是子类,则不关父类的函数是否是虚函数,改对象调用同名函数时都说默认父类的。
father &a3 = a2;//当传值的是一个地址时,如果绑定的是子类,如果父类的函数是非抽象函数,则调用同名函数时默认用父类的。
a1.cry();
a3.cry();
return 0;
}
但如果把父类的同名函数cry()改成virtual
virtual void cry() {
cout << "哇哇哇1" << endl;
}
关于构造函数
int main()
{
son son1;
son1.cry();//正常的子类调用子类自己的函数
son a2;
father a1 = a2;//当被传值的是一个实体对象时,如果绑定的是子类,则不关父类的函数是否是虚函数,改对象调用同名函数时都说默认父类的。
father &a3 = a2;//当传值的是一个地址时,如果绑定的是子类,如果父类的函数是非抽象函数,则调用同名函数时默认用父类的。
father a4(1, "2");//调用自己写的带参构造
father a6 = father(1, "2");//同上
father a5=a6;//调用无参的;
cout << a4 .a<
另外一定要记得,子类要调用父类的成员变量和方法继承时要声名public,另外父类里面的成员变量一定要保证子类要继承,比如用public,特别是构造函数。
class son : public father {//子类要想调用父类的成员变量和方法时必须在继承时保证父类的public。
小二在加个餐!
关于在类外面重写函数:
写法:函数类型+需要改写的函数所在类名字+::+函数名和函数体。
(这个函数类型必须和类里面的一样,函数的转递参数也不能改变)
void father::cry2() {
cout << "恭喜你掌握了在类外重写函数";
}
还有一个c++的mian()函数不要写在类里面,不让会报错。
本学渣写文章不易,看官留个赞呗。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)