C++--C++对象模型分析、c++中的抽象类和接口
发布时间:2020-12-16 07:19:37 所属栏目:百科 来源:网络整理
导读:一.C++对象模型分析 A.class是一种特殊的struct 1.在内存中class依旧可以看作变量的合集 2.在class域struct遵循相同的内存对齐规则 3.class中的成员函数与成员变量是分开存放的--每个对象有独立的成员变量,所有对象共享类中的成员函数 Q:class与struct的内
一.C++对象模型分析
A.class是一种特殊的struct #include <iostream> #include <string> using namespace std; class A { int i; int j; char c; double d; public: void print() { cout << "i = " << i << "," << "j = " << j << "," << "c = " << c << "," << "d = " << d << endl; } }; struct B { int i; int j; char c; double d; }; int main() { A a; cout << "sizeof(A) = " << sizeof(A) << endl; cout << "sizeof(a) = " << sizeof(a) << endl; cout << "sizeof(B) = " << sizeof(B) << endl; return 0; } 运行时的对象退化为结构体的形式 1.所有成员变量在内存中依次排布 2.成员变量间可能存在内存间隙 3.可以通过内存地址直接访问成员变量 4.访问权限关键字运行时失效 5.类的成员函数位于代码段中 6.调用成员函数时对象地址作为参数隐式传递 7.成员函数通过对象地址访问成员变量 8.C++语法规则隐藏了对象地址的传递过程 二,C++中的抽象类和接口A.面向对象的抽象概念 我们知道,在现实中需要知道具体的图形类型才能求面积,所以对概念上的“图形”求面积是没有意义的 B.面对对象的抽象类 1.可用于现实世界中的抽象概念 2.是一种只能定义类型,而不能产生对象的类 3.只能被继承并重写相关函数 4.直接特征是相关函数没有完整的实现 因此,在程序中必须能够反映抽象的图形,程序中通过抽象类表示图形的概念,抽象类不能创建对象,只能用于继承,而在C++语言中没有抽象类的概念,C++中通过纯虚函数实现抽象类,纯虚函数是指只定义原型的成员函数,一个C++类中存在纯虚函数就成为了抽象类。 纯虚函数的语法规则 代码示例 #include <iostream> #include <string> using namespace std; class Shape { public: virtual double area() = 0;//纯虚函数的实现 }; class Rect : public Shape //矩形面积的计算 { int ma; int mb; public: Rect(int a,int b) { ma = a; mb = b; } double area() { return ma * mb; } }; class Circle : public Shape //圆的面积计算 { int mr; public: Circle(int r) { mr = r; } double area() { return 3.14 * mr * mr; } }; void area(Shape* p) { double r = p->area(); cout << "r = " << r << endl; } int main() { Rect rect(1,2); Circle circle(10); area(&rect); area(&circle); return 0; } 运行结果 从示例代码以及运行结果可以看出,纯虚函数实现了我们所需的效果,同时可以总结出:抽象类只能用作父类被继承,子类必须实现纯虚函数的具体功能,纯虚函数被实现后称为虚函数,如果没有子类没有实现纯虚函数,则子类称为抽象类 B.接口的概念 1.类中没有定义任何的成员变量 2.所有的成员函数都是公有的 3.所有的成员函数都是纯虚函数 4.接口是一种特殊的抽象类 代码示例 #include <iostream> #include <string> using namespace std; class Channel { public://定义的接口 virtual bool open() = 0; virtual void close() = 0; virtual bool send(char* buf,int len) = 0; virtual int receive(char* buf,int len) = 0; }; int main() { return 0; } 小结1.抽象类由于描述现实世界中的抽象概念2.抽象类只能被继承不能创建对象3.C++中没有抽象类的概念4.C++中通过纯虚函数实现抽象类5.类中只存在纯虚函数的时成为接口6.接口是一种 特殊的抽象类 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |