C++期末考备忘录

类 I

——若在类体内没有指明访问权限,默认的访问权限为private。
——类是一种数据类型,系统并不会为其分配内存空间。
——构造函数重载:同名不同参
——带有子对象的构造函数的执行顺序:https://blog.csdn.net/qq_15989473/article/details/103215333

拷贝构造函数

——拷贝构造函数的定义

Sample(Sample &S)
//名称与类名相同,形参为本类的引用对象。

——拷贝构造函数的三种调用情况:

// 1&2.同类对象的初始化
Sample S2(S1);
Sample S2 = S1;
// 3.对象作为函数的参数进行传递
void f(A a){
   a.x = 1;};
A obj; f(obj);//相当于A a = obj;
// × 赋值不是初始化,未调用拷贝构造函数
S2 = S1;

析构函数

——析构函数不能重载

~A();  //析构函数声明
A::~A(){
   }  //析构函数定义

——析构函数和构造函数的调用顺序相反

静态成员

——静态数据成员只能在类体内声明,类体外初始化(假如有一个类Sample)

static int num; //类体内声明,需要static关键词
int Sample::num = 1; //类体外初始化,不需要static关键词

——静态成员的访问有两种方式:类名::函数名(); 或者 对象名.函数名();

Sample::function();
obj.function();

推荐用第一种,因为指明了静态成员是属于整个类的。

——非静态成员函数可以任意访问静态和非静态成员 ,静态成员函数只能访问静态成员(数据成员或成员函数)

类 II

——系统给对象分配的内存只是用来存储数据成员的。成员函数的代码统一放在程序的代码区

this指针

——this指针是指向本类对象的指针。
——this指针是在用对象引用成员函数时系统自动创建的。
——this指针是被隐式定义在非静态成员函数的形参中。
——类的静态成员函数没有this指针。因为静态成员函数为类的所有对象所共有,不专属于某一个对象。所以在静态成员函数中不能直接访问非静态数据成员(因为没有this指针)

各种“常”

——常数据成员的初始化必须要用构造函数的初始化列表完成。

Sample(int temp){
   const_num = temp;} // ×
Sample(int temp):const_num(temp){
   } // √

常成员函数

——只能调用const成员函数。
——可以使用const与非const数据成员,但不能修改。

int function() const; //声明
int Sample::function() const //类体外的定义
{
   
	num = 0; //错误,不可修改数据成员。
	unconst_function();//错误,不可调用非const成员函数
	const_function();//只能调用const成员函数
	return num;//正确,可以使用数据成员(const非const都可)
}

常对象

——常对象是指对象的数据成员的值在对象被调用时不能被改变。常对象必须进行初始化,且不能被更新。

//定义格式(必须进行初始化)
const Sample obj1(1,1);
Sample const obj2(0,0);
obj1.unconst_set(2,2);//错误,常对象不能调用非const成员函数
obj1.const_print();//只能调用const成员函数

指向对象的常指针

//指向对象的常指针
Sample *const pr = &obj1;
//pr只能指向对象obj1
pr = &obj2;//错误,指针值不可改变
//但是可以改变对象obj的值,如:
pr->function(2);

指向常对象的指针变量(指针值可以改变)

//指向常对象的指针变量
const Sample *pr = &obj1;
//不能通过pr去修改obj1的空间

注意与常指针相区分

总结

各种“常” 含义 成员函数 数据成员
void Sample::function() const function为常成员函数 只能调用const成员函数 常变量都可以使用(包括private),但不能改变其值
const Sample& s=obj; s是常引用,可以认为把对象obj的属性变成了const 与常对象权限相同 与常对象权限相同
const Sample *pr pr是指向常对象的指针 与常对象权限相同 与常对象权限相同
Sample const obj obj为常对象 只能调用const成员函数 常&变量都可以使用(前提public),但不能改变其值
Sample *const pr=&obj; pr为常指针(指针值不可以改变) const & 非const 都可调用,形式:pr->function(); const & 非const 都可调用,形式:pr->number;

友元

友元函数

(此处源代码来自菜鸟教程 原链接
——友元函数并不是成员函数,但有权访问私有、保护和公有成员(所有成员)。
——友元函数在类内声明,在类外定义
——友元函数不能直接访问类的成员,只能访问对象成员。
——调用友元函数时,在实际参数中需要指出要访问的对象。如下述printWidth函数中的形参Box box
——类与类之间的友元关系不能继承。(也就是说基类的友元函数继承不到派生类中)

class Box
{
   
   double width;
public:
   double length;
   //在类内用friend关键词声明友元函数。
   //此处只能声明,不能定义,因为Box类还未定义。
   friend void printWidth( Box box );
   void setWidth( double wid );
};
//在类外像定义普通函数一样定义友元函数
//不需要使用 类名:: 作用域符号(只有成员函数采用作用域符号)
void 
  • 17
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值