类和对象常见问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yc1515707718/article/details/82657041

const成员函数:

const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。const 成员函数也称为常成员函数。

内联函数:

为了消除函数调用的时空开销,C++ 提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联函数(Inline Function),又称内嵌函数或者内置函数。

注意 :要在函数定义处添加 inline 关键字,在函数声明处添加 inline 关键字虽然没有错,但这种做法是无效的,编译器会忽略函数声明处的 inline 关键字。类的成员函数默认时内联函数。

友元函数:

1.友元函数:

借助友元(friend),可以使得其他类中的成员函数以及全局范围内的函数访问当前类的 private 成员。

友元函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数。友元函数可以访问当

前类中的所有成员,包括 public、protected、private 属性的。friend 函数不仅可以是全局函数

(非成员函数),还可以是另外一个类的成员函数。友元类中的所有成员函数都是另外一个类的友元函数。
 

例如:

public:

friend void show(Student *pstu);

2.友元类

不仅可以将一个函数声明为一个类的“朋友”,还可以将整个类声明为另一个类的“朋友”,这就是友元类。友元类中的所有成员函数都是另外一个类的友元函数。

注意:友元的关系不是双向的,也不能传递

——————————————————————————————————————————————————————————

static 成员变量:

static 成员变量不属于某个类,是属于全局的,在外部初始化,必须在类外初始化,而且不占对象的空间

常考题:

如下代码:

class AA 
{}; 
AA f (AA a) 
{ 
 return a ; 
} 
void Test1 () 
{ 
 AA a1 ; 
 a1 = f(a1); 
} 
void Test2 () 
{ 
 AA a1 ; 
 AA a2 = f(a1); 
} 

void Test3 () 
{ 
 AA a1 ; 
 AA a2 = f(f(a1)); 
} 

问题如下:

Test1中调用了  2   次AA的拷贝构造函数,   1  次AA的赋值运算符函数的重载。
Test2中调用了  2   次AA的拷贝构造函数,   0  次AA的赋值运算符函数的重载。
Test3中调用了  3   次AA的拷贝构造函数,   0  次AA的赋值运算符函数的重载。

做这类题记住一个原则:

传参,用类返回生成临时变量会调用拷贝构造

如果是初始化,如  date d2=d1 编译器会优化,不会调用赋值运算符重载

如果是赋值,如d2=d1,就不会优化,就会调用赋值运算符重载

猜你喜欢

转载自blog.csdn.net/yc1515707718/article/details/82657041