目录
0.引言
1.初始化列表
2.static
静态成员变量:
静态成员函数:
3.友元函数
4.内部类
定义:
特点:
应用:
5.优化写法
6.例题 求和1+2+...+n (不能用for/while/if/else等关键字)
7.总结
0.引言
今天,咱接着上文,继续来唠唠类和对象中的易错知识点😄😄😄
1.初始化列表
🚩形式:类名(类型名 参数):成员变量名(形参1),成员变量名(形参2)...{}
// eg: A ( int a) : _a1(a),_a2(a1){}
class A
{
public:
A ( int a) : _a1(a),_a2(a1){}
private:
int _a1;
int _a2; //★ tip:初始化列表列表顺序尽量与声明顺序一致,因为初始化是按声明顺序进行的。
}
🚩必须要使用初始化列表的情况:1)引用成员变量;2)const成员变量;3)没有默认构造的类类型。
🚩成员变量走初始化列表的逻辑顺序:👇👇👇
2.static
静态成员变量:
❀静态成员变量不属于某个对象,属于整个类(这个类的所有对象);
❀静态成员变量需要在类外初始化。
静态成员函数:
❀静态成员函数没有this指针;
❀非静态成员函数可以访问静态成员变量,静态成员函数只能访问静态成员变量。
static int GetCount()
{
// ++_a1; // 不能访问非静态成员变量,没有this指针
return _count;
}
3.友元函数
🚩形式:在函数/类声明前+friend(友元函数声明位置可以任意,不受类访问限定符限制)
🚩友元函数仅仅是一种声明,它不是类的成员函数;
🚩友元函数调用时,与普通函数类似,不会调用this指针(因为它不属于类)
🚩外部友元函数可以访问类的所有成员,但是,它是单向的(即A是B 的友元函数,A可以访问B的私有成员变量;但是B不一定能访问A);
🚩友元关系不能传递 。
4.内部类
定义:
一个类定义在另一个类的内部,这个内部类就叫做内部类。
特点:
❀只是受外部类类域限制和访问限定符限制,所以外部类定义的对象中不包含(不会额外开辟资源)内部类;
❀内部类默认是外部类的友元类;
❀内部类是平行关系(独立开),主要是受类域和访问限定符限制。
应用:
❀当A类跟B类紧密关联,A类实现出来主要就是给B类使用,那么可以考把A类设计为B的内部类;
❀ A如果放到B类的private/protected位置,那么A类就是B类的专属内部类,其他地方都用不了。
5.优化写法
❀匿名对象(生命周期只在当前一行)
eg:
A();
A(11);
❀传值传参
// 传值传参 ->无优化
A aal(1);
f1(aa1); //不推荐❌cout<<endl;
// 构造+拷贝构造﹣>优化直接构造
f1(A(1)); //推荐 ✔
cout << endl << endl;// f1(1); //推荐 ✔
❀返回
// 一个表达式中,连续拷贝构造+赋值
A aa3;
aa3=f2(); //不推荐❌cout << endl;
// 返回时一个表达式中,连续拷贝构
A aa2 = f2();
cout << endl ; //推荐 ✔
6.例题 求和1+2+...+n (不能用for/while/if/else等关键字)
核心代码👇👇👇
#include <iostream>class Sum
{public:Sum(){_ret+=_i;_i++;};static int Getret(){return _ret;}private:static int _i;static int _ret;
};
int Sum ::_i=1;
int Sum ::_ret=0;
class Solution {
public:int Sum_Solution(int n) {Sum a[n];return Sum::Getret();}
};int main()
{
Solution s;
int n = 100;
int result = s.Sum_Solution(n);
cout<< "The sum from 1 to "<< n << " is: " << result <<endl;
return 0;
在上述测试代码中,创建 Solution 类对象 s ,调用 Sum_Solution 函数计算1到100的累加和并输出。运行后会输出1到100的累加和为5050(通过 Sum 类构造静态成员函数的累加逻辑实现)。
7.总结
看了上面的代码,咱们是不是觉得今天的知识点,得到了运用呢🤭
希望大家可以和小邓儿一起学习和进步哈O(∩_∩)O
都看这么久了呢,别忘了一键三连哦😘😘😘