C++ Primer Plus 第10章 对象和类

冷暖自知 提交于 2020-01-27 00:06:25

1.什么是接口?

对于程序中的类来说,public用户不能直接访问类来进行操作,但是可以调用类中的方法,方法就是public用户和类之间接口的组成部分,因此为了用户能使用类中的成员变量,必须要编写类中的方法,即其中的接口。
另外我们一般将接口(类定义)放在头文件中,并将实现(类方法的代码)放在源代码中,为什么要用这种方式在之前的博客有写到。

2. #ifndef 后面的头文件名为什么要大写

为了区分宏和普通变量。
这个宏是给预处理器用的,通常预处理变量用大写,所以这些宏定义都用大写。为了方便,一般将大写的文件名作为预处理器变量,其实在#ifndef后面加什么都都可以,用文件名只是为了好区分。它只是用来定义一个预处理器变量。

3.类的定义包括什么?

类的定义包括成员变量的定义、函数的声明等,成员变量一般设置为private私有,函数一般设置为public公共,这样设置的原因是为了不让用户直接访问修改成员变量,而通过调用方法访问。
另外类中不设置类型的成员,系统默认这些成员为private类型的。

4.作用域解析运算符::

在c++中可以不通过对象访问方法,而是可以通过作用域解析运算符直接调用类中的函数进行相应的操作。
这和Java与C#中的静态成员方法类似,不通过对象调用而是直接使用。

5.类声明之外定义成员函数使其成为内联函数

class Stock
{
private:
	...
	void set_tot();
public:
	...
};

inline void Stock::set_tot()
{
	total_val = shares * share_val;
}

如上所示,只要在函数定义时使用inline关键字即可。

6.如何使用构造函数?

1.显式调用

Stock food = Stock(“World Cabbage”,250,12.5);

2,隐式调用

Stock food(“World Cabbage”,250,12.5);

3.new动态分配

Stock *food = new Stock(“World Cabbage”,250,12.5);

4.列表初始化

Stock food ={“World Cabbage”,250,12.5};
Stock food {“World Cabbage”,250,12.5};

7.构造函数和对象的关系

无法使用对象来调用构造函数,因为在构造函数构造出对象之前,对象是不存在的。因此构造函数被用来构造对象,而不能通过对象来调用。

8.两种语句的区别

Stock stock2 = Stock("Boffo Objects",2,2.0);
stock1 = Stock("Nifty Foods",10,50.0)	//temporary object

第一条语句是初始化,新建一个stock2对象。而第二句是使用构造函数新建一个临时对象,并且将这个临时对象赋值给stock1。
另外还有

Stock stock2 = stock3
stock2 = stock3	

第一条语句是stock2对象的初始化,将stock3赋值给stock2,而第二天语句是使用运算符重载技术,将stock3
赋值给已经存在的对象stock2,这两条语句是不一样的。

9.在函数定义语句后面加const是什么意思?

比如

void Stock::Show() const

以这种方式声明和定义的类函数被称为const成员函数,这意味着这个函数不会修改调用它的类对象。

10.this指针

this指针指向用来调用成员函数的对象,而不是指向类。每个成员函数(包括构造函数和析构函数)都有一个this指针,这个指针是隐式定义的。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!