欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-02-03 18:51:22
1.C++面对对象编程: a.定义: 类定义是以关键字 class 开头,后跟类的名称。类的主体是包含在一对花括号中。类定义后必须跟着一个分号或一个声明列表。 关键字 public 确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。您也可以指定类的成员为 private 或 p ......

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

 

a.定义:

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

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

 

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

 

box box1;

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

 

b.类成员函数:

注意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.拷贝构造函数:

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

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

 

 

 

h.友元函数:

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

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

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

 

i.静态成员:

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

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

 

静态成员函数:

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

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

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

 

 

 

引用: