C++二级复习3(类和对象)

C++二级复习3(类和对象)

1、关于对象的指针

Time *p1;
Time t1;
p1=&t1;
指向对象成员
int * p1;
p1=&t1.num;
cout<<*p;
普通函数指针
void (*p)();
p=fun;
(*p)();
对象成员函数;
void (Time::*p2)();
p2=&Time::get_time;
指针定义:
数据类型名 (类名::*指针变量名)(参数表);
指针赋值:
指针变量名 = &类名::函数名;			(一般是取地址,调用时取值*)

其实是,数据可以属于类中的某个对象,但是,函数是不属于某个对象的,是属于类中的。所以,指针定义使用有差别。(域作用限定符)

2、共有数据对象的保护
常对象

数据成员不被改变
一般形式:
类名 const 对象名[(实参表)];				定义对象时,必须初始化
const 类名 对象名[(实参表)];

只能调用该对象的常成员函数(只能访问数据),普通成员函数不能调用。
当需要修改常对象中的某个值时,可以在变量声明前加上 mutable,这样该对象的成员函数皆可修改它。

常数据成员
只能通过构造函数的参数初始化列表赋值,其余的声明与之前类似

const int a;

常成员函数
只能引用本类的数据成员(常/普通)

类型名 函数名(参数表)const;

3、指针
a.指向变量的常指针,指向不变
b.指向常变量的指针变量,跟之前的差不多。
但是没有复合两者的指针,没有意义。
b中指针,可以指向(常/普通)变量,普通指针不能指向常对象。

指向常对象的指针变量,无法通过其改变对象的数据成员的值,但其指针本身的值是可以修改的。也就是说,这个指针只是对对象的使用提供了便利,并不能进行操作。

所以,复合是没有意义的。不能改变指向也不能通过指针改变指向对象的值,失去了原本的价值。

4、对象的常引用

const Time &t=t1;
保证了使用对象t 的引用t1时,不会修改数据成员

5、对象的赋值和赋值(这部分书上讲的比较浅,日后再学)
赋值

两个对象属于同一个类,都已经提前定义过了
对象名1 = 对象名2;

复制(从无到有)

类名 对象2(对象1);
类名 对象名1 = 对象名2;
Box box2(box1);
Box box2 = box1;

会调用复制构造函数,函数的声明是的形参是对象的引用,返回值也是对象。
书上的内容仅此而已,然而并没有这么简略就是了。

6、静态成员
静态数据成员,
所有对象的被声明为静态的变量的值都是一样的,修改后,所有对象的也会相应修改,并且,只能类外进行初始化,只此一种方法。

类型名 类名::变量名 = 值;
static BOX::abc=123;

引用时,也要加上域作用限定符。

静态成员函数

static 类型名 函数名(参数表);

类外调用,同样要加上域作用限定符。专门用来引用静态数据成员,无this指针,无法默认访问非静态数据成员(需要的话,需要指明对象 a.num;)

7、友元
友元函数(成员/非成员)
某个类里面使用 friend+函数声明 后,该函数(普通函数或者是某个类的成员函数)可以访问该类的所有成员(包括private,protected),当然需要指定对象。
有可能会涉及类的提前声明,跟其他的声明也差不多,只需类名。

class Date;

友元类
friend 类名;
单向不可逆,所有成员

8、类模板
template <class 类型参数名>(类型参数可以定义多个,前面需加class)

例子:
template <class NTP>
class Compare				类模板名
{public:
	Compare(NTP a,NTP b)
		{x=a,y=b;}
	NTP max()
	{return (x>y)? x:y;}
private:
	NTP x,y;
}

实际使用时,要指定使用的类型

类模板名 <实际类型名> 对象名(参数表);
Compare <int> box(3,3,4);

当类外进行成员函数定义时,需要写成类模板的形式,

template <class NTP>
NTP Compare<NTP>::max()
	{return (x>y)?x:y;}

类外定义时,相当于多加了个 带有自定虚拟类型的域作用限定符。

其实感觉没什么用,类型都限死了,很难遇到只有一个类型数据的类把······

运算符重载,还是另开一篇吧,感觉内容有点小多

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值