C++ 基础语法 快速复习笔记---面对对象编程(2)

2019-11-29 08:39:09来源:博客园 阅读 ()

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

C++ 基础语法 快速复习笔记---面对对象编程(2)

1.C++面对对象编程:

 

a.定义:

类定义是以关键字 class 开头,后跟类的名称。类的主体是包含在一对花括号中。类定义后必须跟着一个分号或一个声明列表。

关键字 public 确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。您也可以指定类的成员为 private 或 protected,私有的成员和受保护的成员不能使用直接成员访问运算符 (.) 来直接访问。

 

类提供了对象的蓝图,所以基本上,对象是根据类来创建的。声明类的对象,就像声明基本类型的变量一样:

 

Box Box1;

Box Box2; //定义了两个box类的对象

 

b.类成员函数:

https://www.runoob.com/cplusplus/cpp-class-member-functions.html

注意C++的namespace概念

 

c.类访问修饰符:

数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员。类成员的访问限制是通过在类主体内部对各个区域标记 public、private、protected 来指定的。

成员和类的默认访问修饰符是 private。

 

(1). 公有(public)成员:

在程序中类的外部是可访问的。您可以不使用任何成员函数来设置和获取公有变量的值 : 

line.length = 10.0 //line是对象,length是public的成员变量,直接赋值不用成员函数。

 

(2). 私有(private)成员:

私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员。

默认情况下,类的所有成员都是私有的。私有成员只能通过成员函数访问:

box.setWidth(10.0);

 

(3). 保护(protected)成员:

保护成员变量或函数与私有成员十分相似,但有一点不同,保护成员在派生类(即子类)中是可访问的。

 

(4) 继承中的特点:

1.public 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:public, protected, private

2.protected 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:protected, protected, private。   (protected 成员可以被派生类访问。)

3.private 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:private, private, private。  (private 成员只能被本类成员(类内)和友元访问,不能被派生类访问)

 

 

 d.继承:

面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。

例子:

class Rectangle: public Shape    // Shape是基类(父)。Rectangle是派生类(子类)

关于成员函数的继承见上一项。

显而易见,子类定义的成员函数和成员变量不能被父类使用,但是父类和成员函数和成员变量都根据情况可以被子类使用。

注:可以多重继承(一个子类可以有好几个父类,嘿嘿)

 

e.类构造函数:

 

类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。

默认的构造函数没有任何参数,但如果需要,构造函数也可以带有参数。这样在创建对象时就会给对象赋初始值.

 

Line::Line( double len)

{

cout << "Object is being created, length = " << len << endl;       //一般就是设定个初始值,比如 a = len;

length = len;

 

 

Sub:C++ 初始化类成员时,是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。所以说最好按照顺序声明。

 

f. 析构函数:

类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。

析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。

 

Line::~Line(void)

{

cout << "Object is being deleted" << endl //一般不是这种,一般都是释放内存或者关闭文件之类的指令(delete 或者 close)

}

 

 

g.拷贝构造函数:

拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象

如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。

 

https://www.runoob.com/cplusplus/cpp-copy-constructor.html

 

 

h.友元函数:

类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。

友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。

如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend。

 

i.静态成员:

我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。

静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化.

 

静态成员函数:

如果把函数成员声明为静态的,就可以把函数与类的任何特定对象独立开来。静态成员函数即使在类对象不存在的情况下也能被调用,静态函数只要使用类名加范围解析运算符 :: 就可以访问。

静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。

静态成员函数有一个类范围,他们不能访问类的 this 指针。您可以使用静态成员函数来判断类的某些对象是否已被创建。

 

 

 

引用:https://www.runoob.com/cplusplus/cpp-classes-objects.html

http://c.biancheng.net/view/2201.html


原文链接:https://www.cnblogs.com/cptCarlvon/p/11951076.html
如有疑问请与原作者联系

标签:HTMLIEemSpanNETHTTP

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:C++ const常量对象、常量成员函数和常引用

下一篇:AtCoder-arc059 题解