封装和继承是为了实现代码的重用,
而多态是为了实现接口的重用。
sizeof(class)
对类sizeof是求
类成员对其之后加
虚函数表头之和
类成员对其之后加
虚函数表头之和
若是继承类虚函数只做一张表 也就是只有一个表头
操作符重载代码示例
#include<iostream>
using namespace std;
class Point
{
private:
int x;
public:
Point(int x1)
{ x=x1;}
Point(Point& p)
{ x=p.x;}
const Point operator+(const Point& p);//使用成员函数重载加号运算符
friend const Point operator-(const Point& p1,const Point& p2);//使用友元函数重载减号运算符
};
const Point Point::operator+(const Point& p)
{
return Point(x+p.x);
}
Point const operator-(const Point& p1,const Point& p2)
{
return Point(p1.x-p2.x);
}
int main()
{
return 0;
}
继承的代码示例
//例子
#include <iostream>
using namespace std;
#include <string>
class Animal{
string name;
public:
virtual void eat()=0;//一定不会被执行,纯虚函数
virtual void sleep(){
cout << “动物休息” << endl;
}
virtual void shout(){
cout << “动物叫” << endl;
}
};//注意分号
class Cat : public Animal{
public:
virtual /* virtual 可写可不写 */ void eat(){
cout << “猫写猫粮” << endl;
}
void sleep(){
cout << “猫睡觉” << endl;
}
void shout(){
cout << “猫喵喵叫” << endl;
}
};//注意分号
class Dog : public Animal{
public :
void eat(){
cout << “狗吃骨头” << endl;
}
void sleep(){
cout << “狗在睡觉” << endl;
}
void shout(){
cout << “我叫旺财” << endl;
}
};//分号不能少
class JiaFei : public Cat{
public :
void eat(){
cout << “加非猫爱吃意大利面” << endl;
}
void sleep(){
cout << “加非猫睡在沙发上” << endl;
}
void shout(){
cout << “加非猫说下午好” << endl;
}
}; // 分号
class Player{
string name;
public :
Player( string n ) : name(n){}
void play( Animal* p/*指针*/ ){
p->eat();
p->sleep();
p->shout();
}
void play( Animal& p /*引用*/){
p.eat();
p.sleep();
p.shout();
}
};
// 分号
// 分号
typedef void (*fun)(void);
int main()
{
//cout << sizeof(Animal) << endl; //输出8
Cat c;
Dog d;
JiaFei j;
Player p1( “小小” );
Player p2( “蔡依林”);
p1.play(&c);
p2.play(&d);
p2.play(&j);
Cat *pc=&c;
Dog *pd=&d;
cout<<(int*)pc<<endl;
cout<<sizeof(*(int*)pc)<<endl;
cout<<sizeof(Animal)<<endl;
cout<<sizeof()<<endl;
return 0;
}
虚函数表代码示例
#include <iostream.h>
typedef void (*Fun)(void);
class Base {
public:
virtual void f(){cout<<“Base::f”<<endl;}
virtual void g(){cout<<“Base::g”<<endl;}
virtual void h(){cout<<“Base::h”<<endl;}
};
int main(){
Base b;
Fun pFun = NULL;
cout<<“虚函数表地址:”<<(int*)(&b)<<endl;
cout<<“虚函数表 — 第一个函数地址:”<<(int*)*(int*)(&b)<<endl;
pFun = (Fun)*((int*)*(int*)(&b));
pFun();
pFun = (Fun)*(1+(int*)*(int*)(&b));
pFun();
pFun = (Fun)*(2+(int*)*(int*)(&b));
pFun();
return 0;
}
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/18518.html