【C/C++学院】(7)C++面向对象模型初探专题

1、 基础知识

    C++中的class从面向对象理论出发,将变量(属性)和函数(方法)集中定义在一起,用于描述现实世界中的类。从计算机的角度,程序依然由数据段和代码段构成。

#include "iostream"
using namespace std;

class C1
{
public:
	int i; //4
	int j; //4
	int k; //4
protected:
private:
}; //12

class C2
{
public:
	int i; //4
	int j; //4
	int k; //4

	static int m; //4
public:
	int getK() const { return k; } //4
	void setK(int val) { k = val; } //4

protected:
private:
}; //12

struct S1
{
	int i;
	int j;
	int k;
}; //12

struct S2
{
	int i;
	int j;
	int k;
	static int m;
}; //12

int main()
{
	printf("c1:%d \n", sizeof(C1));
	printf("c2:%d \n", sizeof(C2));
	printf("s1:%d \n", sizeof(S1));
	printf("s2:%d \n", sizeof(S2));

	system("pause");
}

2、用内存四区解释 C++属性和方法

2.1 C++类对象中的成员变量和成员函数是分开存储的

成员变量:

普通成员变量:存储于对象中,与struct变量有相同的内存布局和字节对齐方式

静态成员变量:存储于全局数据区中

成员函数:存储于代码段中。

2.2 C++编译器对普通成员函数的内部处理

3、总结:

3.1 C++类对象中的成员变量和成员函数是分开存储的。C语言中的内存四区模型仍然有效!

3.2 C++中类的普通成员函数都隐式包含一个指向当前对象的this指针。

3.3 静态成员函数、成员变量属于类

静态成员函数与普通成员函数的区别

静态成员函数不包含指向具体对象的指针

普通成员函数包含一个指向具体对象的指针

时间: 2024-12-04 01:08:40

【C/C++学院】(7)C++面向对象模型初探专题的相关文章

《软件工程方法与实践》—— 3.4 面向对象模型

本节书摘来自华章出版社<软件工程方法与实践>一 书中的第3章,第3.4节,作者窦万峰,更多章节内容可以访问"华章计算机"公众号查看. 3.4 面向对象模型 3.4.1 构件集成模型 构件集成模型利用模块化方法将整个系统模块化,并在一定构件模型的支持下重用构件库中的软件构件,通过组合手段提高应用软件系统过程的效率和质量.构建集成模型融合了螺旋模型的许多特征,本质上是演化型的,开发过程是迭代的.基于构件的开发模型由软件的需求分析和定义.体系结构设计.构件库建立.应用软件构建及测

AS代码2.0:面向对象模型

对象 自从几年前在Flash中引入动作脚本语言(Action Script)以来,它已经有了很大的发展.每一次发布新的Flash版本,动作脚本语言都增加了关键字.方法和其它语言元素.然而,与以前发布Flash版本不同,Flash MX 2004和Flash MX Professional 2004的动作脚本语言2.0引入了一些新的语言元素,可以更加标准的方式实施面向对象的编程,这些语言元素使核心动作脚本语言的能力显著增强. 动作脚本语言2.0并非一种新的语言.更确切地说,它由一套核心语言元素组成

面向对象模型技术

对象模型技术(object modeling technique,OMT)是美国通用电气公司提出的一套系统开发技术.它以面向对象的思想为基础,通过对问题进行抽象,构造出一组相关的模型,从而能够全面地捕捉问题空间的信息. 对象模型技术把分析时收信到的信息构造在三类模型中,即对象模型.功能模型和动态模型.三个模型从不同角度对系统进行描述,分别着重于系统的一个方面,组合起来构成对系统的完整描述.形象的说,功能模型定义"做什么",状态模型定义"何时做",对象模型定义&quo

PHP中的面向对象和面向过程

对象|过程 简介"真正的天才具有正确评价不确定的,有风险的和矛盾的信息的能力.--邱吉尔" 使用许多编程语言时,你通常只能使用面向对象或面向过程二者之一的编程方式.而在PHP中,你可以自由选择或混用.目前绝大多数PHP程序员使用面向过程的方式,因为解析WEB页面本身就非常"过程化"(从一个标签到另一个标签).在HTML中嵌入过程处理代码是很直接自然的作法,所以PHP程序员通常使用这种方式. 如果你是刚接触PHP,用面向过程的风格来书写代码很可能是你唯一的选择.但是如

深度探索C++对象模型(3)

介绍 多态是一种威力强大的设计机制,允许你继承一个抽象的public接口之后,封装相关的类型,需要付出的代价就是额外的间接性--不论是在内存的获得,或是在类的决断上,C++通过class的pointer和references来支持多态,这种程序风格就称为"面向对象". 大家好,雷神关于<深度探索C++对象模型>笔记终于又和大家见面了,速度慢的真是可以.好了不浪费时间了,直接进入主题. 这篇笔记主要解决了几个常常被人问到的问题. 1.C++支持多重继承吗? 2.结构和类的区别

CORBA技术初探

一.概述 CORBA(Common Object Request Broker Architecture, 公共对象请求代理体系结构)是由OMG(对象管理组织,Object Management Group)提出的应用软件体系结构和对象技术规范,其核心是一套标准的语言.接口和协议,以支持异构分布应用程序间的互操作性及独立于平台和编程语言的对象重用. CORBA经过近十多年的发展,已逐步走向成熟,并成功地应用在我国许多大型的软件系统中,由此产生了对掌握CORBA技术的软件开发人员的大量需求.在此,

c++对象模型读书笔记

1.什么是C++对象模型 1.语言中直接支持面向对象程序设计的部分 2.各种支持的底层实现机制 2.C语言是面向过程的: 语言本身没有支持数据和函数之间的关联性,是程序性的,分布在各个以功能函数为导向的函数中他们处理的是共同的外部数据. C++用独立的"抽象数据类型"ADT实现 3.C++在布局以及存取时间上主要额外负担的VIRUTAL引起的 1.virtual function机制 2.virtual base class多次继承系统中的基类,有一个单一而被共享的实体 4.C++有两

用 Python 实现一个最简单的对象模型

本文讲的是用 Python 实现一个最简单的对象模型, 一个简单的对象模型 Carl Friedrich Bolz 是一位在伦敦国王大学任职的研究员,他沉迷于动态语言的实现及优化等领域而不可自拔.他是 PyPy/RPython 的核心开发者之一,于此同时,他也在为 Prolog, Racket, Smalltalk, PHP 和 Ruby 等语言贡献代码.这是他的 Twitter @cfbolz . 开篇 面向对象编程是目前被广泛使用的一种编程范式,这种编程范式也被大量现代编程语言所支持.虽然大

《数据库原理与应用(第3版)》——2.3 组织层数据模型

2.3 组织层数据模型 组织层数据模型是从数据的组织形式的角度来描述信息,目前,在数据库技术的发展过程中用到的组织层数据模型主要有:层次模型(Hierarchical Model).网状模型(Network Model).关系模型(Relational Model).面向对象模型(Object Oriented Model)和对象关系模型(Object Relational Model).组织层数据模型是按组织数据的逻辑结构来命名的,比如层次模型采用树形结构.而且各数据库管理系统也是按其所采用的