一、面向对象的程序设计

1、概念:是一种程序设计范型,同时也是一种程序开发的开发方法。

对象指的是类的实例,将对象作为程序的基本单元,将程序和数据封装在其中,以提高软件的重用性、灵活性和扩展性。

C++不是纯面型对象语言,而是基于面向对象的语言

面向对象的特性:封装、继承、多态

2、封装:隐藏对象的属性和实现细节,仅对外公开接口和对象进行交互,将数据和操作数据的方法进行有机结合。

二、类(class、struct)


1、访问限定符


(1)public成员在类外可以直接访问,protected/private成员在类外可以访问

(2)每个限定符在类体中可以使用多次,它的作用是:从该限定符出现开始到下一个限定符之前或类体结束前

(3)class默认访问权限是private,而struct为public

(4)类的访问限定符体现了面对对象的封装性

2、作用域


(1)每个类都定义了自己的作用域,类的成员(成员变量/成员函数)都在类的这个作用域中,成员函数内可以任意访问成员变量和其他成员函数

(2)对象可以通过直接访问公有成员,指向对象的指针通过->也可以直接访问对象的公有成员

(3)在类外定义成员变量,需要使用::作用域解析符指名成员属于哪个类域

3、成员函数的声明和定义

(1)类内定义成员函数

(2)类外定义成员函数

#include<iostream>
using namespace std;

class Student
{
public://访问限定符
	void Show()//类内定义的成员函数
	{
		cout << _name << endl;
		cout << _sex << endl;
		cout << _age << endl;
	}
	Student(char* name, char* sex, int age);//类外定义的成员函数的声明
private://访问限定符
	char* _name;//成员变量
	char* _sex;
	int _age;
};
Student::Student(char* name,char* sex,int age)//类外定义的成员函数
{
	_name = name;
	_sex = sex;
	_age = age;
}
int main()
{
	Student stu("直接","男",12);
	stu.Show();
	system("pause");
	return 0;
}

4、类实例化对象

(1)类只是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它

(2)一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间存储类成员变量

(3)类只是一个设计,实例化出的对象才能实际存储数据,占用物理空间


5、类对象存储模型

每个对象的大小为类中所有成员变量的大小之和,并且遵循内存对齐原则


三、相关面试题

1、为什么内存要对齐?

 为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。

2、空类对象(无成员变量的类)的大小是多少?为什么?

空类对象(无成员变量的类)的大小是1

为了标识实例化出来的对象

3、A和B类型的大小分别是多少?

class A
{
	char ch;
	double d;
};
class B
{
	char ch1;
	A a;
	char ch2;
};

在VS下,A是16,B是32


总结:

结构体对齐原则:

(1)第一个成员变量在与结构体变量偏移量为0的地址处

(2)其它成员变量要对齐到某个数字(对齐数)的整数倍的地址处

       对齐数=编译器默认的一个对齐数与该成员大小的较小值

       VS中默认的值为8

       gcc中默认的值为4

(3)结构体总大小为最大对齐数(每个成员变量除了第一个成员都有一个对齐数)的整数倍

(4)如果嵌套了结构体的情况,嵌套结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值