【C++教材复习】第2、3章 类和对象 ——(谭浩强教授版)

目录

2.1 面向对象概述

2.2 类的声明和对象的定义

2.3 类的成员函数

3.1 构造函数

3.2 析构函数 


2.1 面向对象概述

对象:客观世界中任何事物可看成一个对象

属性:对象的静态特征;   行为:动态特征 ;    消息:外界向内部传递信息。

一个对象往往是由一组属性和行为构成。

类是对象的抽象,而对象则是类的特例,是类的具体表现形式。 

C++中,每个对象由数据和函数(操作代码)两部分组成、

“封装性”:指两方面的含义:一是将有关的数据和操作代码封装在一个对象中,形成一个基本的单位,各个对象之间相互独立,互不干扰。二是将对象某些部分对外隐蔽,只留下少数接口,与外界联系,接受外界信息。

2.2 类的声明和对象的定义

在类的定义时,未指定成员访问限定符,系统会将全部成员默认为private(私有的)。 

protected访问限定符,不能被类外访问,但可以被派生类的成员函数访问。

 2.3 类的成员函数

class Time
{public:
int hour:
int minute;
};
Time t,*p;
p=&t;
cout << p->hour;
cout << (*p).hour
cout << t.hour

 

3 关于类和对象的进一步讨论


3.1构造函数

3.1.4 用参数初始化表对数据成员初始化

Box::Box(int h,int w,int len):height(h),width(w),length(len){}
分别用形参 h , w , len 对数据成员初始化赋值 

3.1.5 构造函数的重载

一个类可定义多个构造函数,以便对类不同的初始化方式,这些构造函数有相同的名字,而参数的个数或参数的类型不相同。对于每个对象,建立对象只执行其中一个构造函数。

3.1.6 使用默认参数的构造函数

例3.3 建立立方体对象,输入长宽高后计算他的体积。

#include <iostream>
using namespace std;

class  Box
{
public:
	Box(int h=10,int w=10,int len=10);
	int volume();
private:
	int height;
	int width;
	int length;
};

Box::Box(int h, int w, int len) :height(h),width(w),length(len){}  //参数初始化列表赋值

int Box::volume()
{
	return    height*width*length;
}

int  main()
{	
	Box  b1; 
	cout << "The volume of box1 is " << b1.volume() << endl;
	Box  b2(20);
	cout << "The volume of box2 is " << b2.volume() << endl;
	Box  b3(20,30);
	cout << "The volume of box3 is " << b3.volume() << endl;
	Box  b4(40, 30,10);
	cout << "The volume of box4 is " << b4.volume() << endl;
}

3.2 析构函数 

在一个函数中定义一个对象,当这个函数调用结束时,自动调用析构函数。

全局对象、static局部对象在main函数结束或调用main函数。

“先构造的后析构,后构造的先析构”

  3.4 对象数组

在定义对象数组时,采用依次写出构造函数的方式赋值。

Student Stud[3]={
Student (1001,18,87),
Student (1002,18,89),
Student (1003,19,85),
};

3.5 对象指针

指向普通函数的指针变量的定义方法:      数据类型名   (* 指针变量名)(参数表列)

void (*p) () ;    //p是指向void型函数的指针变量
p=fun;            //将fun函数的入口地址赋给指针变量p,p就指向了函数fun
(*p)();           //调用fun函数

指向对象公用成员函数的指针变量的定义:   数据类型名   (类名 : : * 指针变量名)(参数列表)

使指针变量指向一个公用成员函数的一般形式:  指针变量名  =& 类名 :: 成员函数名

例3. 7 有关对象指针的使用方法 

#include <iostream>
using namespace std;

class Time{
……
}

int main(){
Time t1 (10,13,56)
int *p1=&t1.hour;       //定义指向整型数据的指针变量
t1.get_time();          
Time *p2 = &t1;         //定义指向Time类对象的指针变量p2
p2->get_time();
void (Time:: *p3)();    //定义指向Time类公用成员函数的指针变量p3
p3=&Time::get_time;     //使p3指向具体的成员函数
(t1.*p3)();             //调用t1中p3所指向的成员函数(即 t1.get_time())
}

3.9 静态成员

3.9.1 静态数据成员

类的静态数据成员,为所有实例的类对象所有,只占一份空间,在程序结束时才释放。

只能在类体外进行初始化。

通过对象和类名均可调用静态数据成员。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曾小蛙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值