所有带virtual的类的对象,里面最上面有一个隐藏的指针vptr,指向一张表vtable 1 #include <iostream>2usingnamespace std;3 4class A5{6public:7 A() :i(10) {}8virtualvoid f() { std::cout << "A::f()" << std::endl; }9int i;
10};
1112void main()
13{
14 A a, b;
15 a.f();
1617 std::cout << sizeof(a) << std::endl;//8,不是41819int *p = (int *)&a;
20int *q = (int *)&b;
2122int *x = (int *)*p;
2324...
数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。 数据抽象是一种依赖于接口和实现分离的编程(设计)技术。 C/C++的学习裙【七一二 二八四 七零五 】,无论你是小白还是进阶者,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享! 让我们举一个现实生活中的真实例子,比如一台电视机,您可以打开和关闭、切换频道、调整音量、添加外部组...
面向对象编程概述继承(Inheritance)class Quote
{
public:Quote(){cout<<"Quote的构造函数!"<<endl;}string isbn() const {cout<<"Quote的isbn()调用!"<<endl; string s="Quote,isbn"; return s;}virtual double net_price(size_t n) const {cout<<"虚函数!"<<endl; double d=1; return d;} //虚函数,这个不同的类会定义自己不同的版本
};//继承,如何继承?
class Bulk_quote : public Quote //Bulk_quote继承了Quote...
五大原则:1、单一职责原则SRP(Single Responsibility Principle):是指一个类的功能要单一,不能包罗万象。如同一个人一样,分配的工作不能太多,否则一天到晚虽然忙忙碌碌的,但效率却高不起来。2、开放封闭原则OCP(Open-Close Principle):一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。比如:一个网络模块。原来只有服务端功能,而现在要加入客户端功能,那么应当在不用修改服务端功能代码的前提下,就能够增...
1. Object Based(基于对象) vs. Object Oriented(面向对象)Object Based: 面对的是单一class的设计;Object Oriented:面对的是多重classes的设计,class 和 class 之间的关系。 classes 的两个经典分类:class without pointer members -- complexclass with pointer members -- string 2. 设计 string 2.1 防卫式声明 2.2 Big Three若类内有指针成员,则一定要重写 拷贝构造函数,赋值构造函数和析构函数,即Big Three,执...
下面是一个头文件people.h,这个头文件有一个类People,类中有一个未实现的方法sayHello();1class People{
23public:
4void sayHello();
5 };接下来这个源文件实现了People的sayHello方法,用于打印一句话;#include <iostream>
#include "people.h"usingnamespace std;void People::sayHello(){cout<<"Hello World!"<<endl;
}最后是主函数所在的文件了,主要new了一个People对象,并且调用了他的sayHello对象打印一句话; 1 #incl...
/*此处用面向对象编程*/#include<iostream>
#include<string.h>
using namespace std;
class Matrices
{
private:int mat[3][3];
public:Matrices();void input(){for(int i=0; i<3; i++){for(int j=0; j<3; j++){cin>>mat[i][j];}}}friend Matrices operator+(Matrices &,Matrices &);friend Matrices operator-(Matrices &a,Matrices &b);friend ostream &operator <<(ostream &output,Matrices &);friend istream &operator >>(...
结束了第一个hello world程序后,我们来用面向过程和面向对象两个方法来求解圆的面积这个问题,以能够更清晰的体会面向对象和面向过程。第一,面向过程计算圆的面积程序中我们看到一个标准输入流cin,之前我们接触过标准输出cout,我们来大概说一下这两个东西!仅供理解!cout是干什么的呢?cout是标准输出流,就是表示某某某输出到屏幕上,cout<<某某某,这个左移操作符在这里已经进行了重载,表示不同的意思,比如小溪的水流,这...
学习了图的深度优先和广度优先遍历,发现不管是教材还是网上,大都为C语言函数式实现,为了加深理解,我以C++面向对象的方式把图的深度优先和广度优先遍历重写了一遍。废话不多说,直接上代码: 1 #include<iostream>2 3usingnamespace std;4 5 6//构造一个循环队列来存放广度优先算法的下标 7 8#define ADD 5;9 10usingnamespace std;11 12class CirQueue13{14private:15int * base;16int front,rear,size,length;17publi...
首先本文以C++描述面向对象。面向对象应该可以说是C++对C最为重要的扩充。面向对象使得C++可以用更符合人的思维模式的方式编程,使得有一定基础的程序员可以更容易的写程序。相对于C,C++还有其他许多方面的改进,唯一的缺点就是损失了些许效率。本文只针对笔者心中的C++面向对象进行总结说明。 最开始学习面向对象切忌浮躁,需要有耐心的去理解。如果不能从文字解释上理解这里面“对象”这个词,可以从C++增加的关键字class的...
一、类 1.类是一种数据类型,将数据与对数据的操作(函数)放到一起。一个类中的数据通常只能通过本类提供的方法进行处理,这些方法成为该类与外部的接口,对象之间通过消息进行通讯。 2.如果在类的起始点无访问说明符,系统默认为私有(private) 3.类是一种数据类型,定义时系统不为类分配存储空间,所以不能对类的数据成员进行初始化。类中的任何数据成员也不能使用关键字extern,auto,register等关键字限定其存储类型 ...
1. 面向对象编程的三个基本概念:数据抽象(类),继承(类继承)和动态绑定(运行时决定使用基类函数还是派生类函数)。面向对象编程的关键思想是多态性。2. 派生类可以继承基类中定义的成员;派生类可以调用基类函数;派生类可以重定义基类的函数;派生类可以定义新的数据成员和函数成员。3. 基类通过关键字virtual来指出希望派生类重新定义的函数(虚函数)。而基类希望派生类继承的函数不能使用virtual关键字。4. 通过动态绑定...
多态性编译时的多态性与运行时的多态性在面向对象方法中,所谓多态性就是不同对象收到相同信息时,产生不同的行为。在c++程序设计中,即“一个接口,多种方法”
在C++中,多态性的实现和联编这一概念相关,一个源程序经过编译、连接,称为可执行文件的过程即为把可执行代码联编在一起的过程。其中在运行前完成的称为静态联编,又称前期联编,而在运行时完成的称为动态联编,也称后期联编
静态联编支持的多态性称为编译时多态性,也...
面对对象的基本概念
面对对象的意义在于1.将日常生活中习惯的思维方式引入程序设计中2.将需求中的概念直观的映射到解决方案中3.以模块为中心构建可复用的软件系统4.提高软件产品的可维护性和可扩展性类和对象使面对对象中的两个基本概念类:指的是一类事物,是一个抽象的概念对象:指的是属于某个类的具体实体类是一种模型,这种模型可以创建处不同的对象实体对象实体使类模型的一个具体实例我们可以知道,一个类可以有多个对象,而...
1.面向对象程序设计有4个主要的特点:抽象、继承、封装、多态。2.类和类之间的关系:包含关系;使用关系;继承关系。3.继承的重要说明:子类拥有父类的所有成员变量和成员函数;子类可以拥有父类没有的成员方法和属性;子类就是一种特殊的父类;子类对象可以当作父类对象使用;4.继承中的类型兼容性原则:兼容性原则是指在需要基类的任何地方,都可以使用派生类对象来代替;通过公有继承派生类获得了基类中处构造函数、析构函数外的...