一.C++的多态性
多态性:
前提继承,虚函数,指针域被引用
类型的转换
纯虚函数:不需要函数体(一直不需要函数体)
友元
必须在一个类的内部声明。打破继承的局限性
访问必须是使用对象点的方式来访问
注意友元没有当前的对象。(this);
静态:
属于整个类;不是属于一个对象;
注意友元没有当前的对象。(this);
二.运算符重载
java不支持运算符的重载
一般的函数的继承性
子函数内的函数可以继承父函数中的成员变量,可以调用
父函数中的函数;总之父函数中的东西,子函数基本可以调用;
注意在c++的继承关系中一般父类的成员动作函数
需要在类的外面实现,最后在主函数中调用。如果在
主函数中直接使用时由于多个继承会产生冲突。例子
#include <iostream.h>
class Mammal
{
public:
virtual void eat(){cout<<"1"<<endl;}
virtual void shout(){cout<<"2"<<endl;}
virtual void sleep(){cout<<"3"<<endl;}
};
class Cat:public Mammal
{public :
void eat(){cout<<"猫吃鱼"<<endl;}
void shout(){cout<<"猫吃鱼"<<endl;}
void sleep(){cout<<"猫吃鱼"<<endl;}
};
class Dog:public Mammal
{public :
void eat(){cout<<"猫吃鱼"<<endl;}
void shout(){cout<<"猫吃鱼"<<endl;}
void sleep(){cout<<"猫吃鱼"<<endl;}
};
void play( Mammal p )//注意之处
{
p.eat();
p.sleep();
p.shout();
}
int main()
{
Cat c;
Dog d;
play(c);
play(d);
}
三.拷贝构造函数
这个函数实在一个类的内部调用的,不存在继承拷贝构造函数一般是函数的参数不一样和系构函数差不多
小例子:
#include <iostream.h>
class A{
int d;
public :
A():d(0){cout<<"A()"<<endl;}
A(int d):d(d)/*函数的参数传递*/{cout<<"A(int)"<<endl;}
A(int x,int y):d(x*y){cout<<"A(i,i )"<<endl;}//函数的拷贝注意在这个函数中需要一个小的系构函数把申请的变量释放掉;
void disp()
{
cout<<"d="<<d<<endl;
}
~A(){cout<<"~A()"<<endl;}
};
int main()
{A a1;
a1.disp();
a1 = A(10);
a1.disp();
a1 = (A)100;
a1.disp();
a1 = 200;//A(200),(A)200
a1.disp();
cout << "---------" << endl;
}