自考 C++ 杂记 ——类和对象

一、类及其实例化

1.关键字private、protected、public的访问权限

2.类的对象使用规律:

1)成员函数直接使用自己类的私有成员

2)类外面的函数不能直接访问类的私有成员

3)类外面的函数只能通过类的对象使用该类的公有成员函数

4)对象A和B代码一样 ,但属性值不一样

二、构造函数、析构函数

1.构造函数的作用、定义及使用方法

1)特殊的成员函数,它与类名同名,实现对该对象的初始化

2)既可以定义成有参函数,也可以定义成无参函数

3)重载构造函数时,根据构造函数中的参数个数和类型选择合适的构造函数eg: Add(int a,int b) Add(float a,float b)

2.运算符 new 与delete

如果函数返回值作为另一个函数的参数,这个返回值必须与参数的类型一致。

3. 复制构造函数

拷贝构造函数是指将已存在的该类的一个对象通过引用作为构造函数的参数进行传递从而达到构造函数的目的。一般地存在拷贝构造函数的同时也会有其他的构造函数存在。

class Point{
    public:
        //类体
        Point (Point &); //声明拷贝构造函数
}
Point :: Point (Point &t){   //定义拷贝构造函数
    x=t.x;
    y=t.y;
}
void main(){
    Point obj1(25,52);
    Point obj2(obj1); //使用obj1的数据成员初始化obj2,即数据成员为25和52
}
//最后这条语句调用了拷贝构造函数Point :: Point (Point &t),用obj1初始化obj2
//拷贝构造函数必须使用对象的引用作为形式参数,为安全起见推荐使用的原型为Point (const Point &);

4.析构函数

1)对象使用完毕后且在对象消失前,系统会自动调用类的析构函数来释放系

统资源,在类名的前面加上"~"

2)没有返回值,也没有参数。一个类中只能拥有一个析构函数,析构函数不

能重载。

三、类和对象的性质及UML图

1.This指针

保证每个对象拥有自己的数据成员,但其代码可以被共享

2. 对象的性质

(1) 同一类的对象之间可以相互赋值。(2)可使用对象数组。

(3)可使用指向对象的指针。(4)对象可以用作函数参数。

(5)对象作为函数参数时,可以使用对象、对象引用和对象指针。(6)一个对象可以用作另一个类的成员。

3. 类的性质

(1)使用类的权限

(2)不完全的类声明

(3)空类

(3)类作用域

面向对象的四个基本特性是多态性、继承性、封装性、抽象

4. 对象、消息及类

对象传递消息的三部分:接收对象名、调用操作名、必要的参数

5.历年真题

1.设类A将其它类对象作为成员,则建立A类对象时,下列描述正确的是( )

A.A类构造函数先执行     B.成员构造函数先执行

C.两者并行执行       D.不能确定

【分析】类的组合,描述的是一个类内嵌其他类的对象作为成员的情况,它们之间的关系是一种包含与被包含的关系。

【答案】B

在声明一个组合类的对象时,不仅它自身的构造函数将被调用,而且还将调用其内嵌对象的构造函数。这时构造函数的调用顺序是:

(1)按照内嵌对象在组合类的声明中出现的次序,依次调用内嵌对象的构造函数;

(2)执行本类构造函数的函数体

析构函数的调用执行顺序与构造函数刚好相反。

 

2.设在程序中使用如下语句申请了一个对象数组:Point * ptr = new Point[2];

则在需要释放ptr指向的动态数组对象时,所使用的语句是( )。

【分析】 动态对象的建立:new 删除:delete

【答案】delete [ ] ptr

 

3.下列关于析构函数的描述中正确的是(   )

A.析构函数可以重载       B.析构函数可以是虚函数

C.析构函数名与类名相同     D.析构函数的返回类型为void

【分析】析构函数的性质

【答案】B

基类指针可以指向派生类的对象(多态性),如果删除该基类指针(指向派生类对象)delete p;就会调用该指针指向的派生类析构函数,而派生类的析构函数又自动调用基类的析构函数,这样整个派生类的对象完全被释放

如果基类析构函数不被声明成虚函数,则编译器实施静态绑定,在删除基类指针时只会调用基类的析构函数而不调用派生类析构函数,这样就会造成派生类对象析构不完全。所以,将析构函数声明为虚函数是十分必要的。

http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html

https://zhidao.baidu.com/question/207712177.html

4.改错题:

class Point
{
  int X,Y;
public:
  Point( ){X=0;Y=0;}
  Point(int x=0,int y=0){X=x;Y=y;}
  void display( ){cout<<X<<","<<Y<<endl;}
};

【分析】构造函数中的二义性

【答案】 Point(int x=0,int y=0){X=x;Y=y;}  //构造函数有二义性;不知道将x赋值给哪一个x,用域名控制符和消除成员名控制二义性

5.面向对象程序设计不仅能进行功能抽象,而且能进行__数据__抽象。

6.复制构造函数使用__对象的引用__作为形式参数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值