首页 > 代码库 > C++ 学习总结 复习篇
C++ 学习总结 复习篇
?
- 友元的使用
分为友元类和友元函数
- // BlankTest.cpp : 定义控制台应用程序的入口点。
- //
- //友元类与友元函数的共同点:都可以让某一个类作为另一个类或者函数的参数。
- ?
- //友元类:它让当前类成为另一个类的友元,然后,另一个类可以访问当前类的私有成员。
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- ?
- class myclass
- {
- ???int m;
- ???int n;
- public: //若不加public,则编译错误。友元类无法访问私有成员。
- ???myclass(int i, int j)
- ???{
- ??????m = i;
- ??????n = j;
- ???}
- ???friend class test; //友元类的使用
- ???//简单点讲就是外部函数的内嵌 可以访问
- ???friend int sub(myclass k); //友元函数的使用
- };
- ?
- class test
- {
- public:
- ???void Test(myclass k)
- ???{
- ??????cout << k.m << " " << k.n << endl;
- ???}
- };
- ?
- int sub(myclass k)
- {
- ???return k.m;
- }
- ?
- int _tmain(int argc, _TCHAR* argv[])
- {
- ???myclass *p = new myclass(3,6);
- ???test *t = new test();
- ???t->Test(*p);
- ???cout << sub(*p) <<endl;
- ???return 0;
- }
?
突然想到static 、 const 、 static const 以及它们的初始化
Const 定义的常量超出其作用域会被释放掉,而static 定义的静态常量在函数直线后不会释放其存储空间。
对于各自的初始化规则如下:
- const定义的常量,需要在初始化列表中初始化。
- static定义的静态变量,需要在类的外部初始化。
- const static 与 static const 一样,它也是需要在类的外部初始化。
- const 形式的方法 其主要作用是为了防止成员函数修改成员变量的值。作用域为某个对象,不同的对象可以有不同的const定义的常量的值。
- static形式的方法 其主要作用是为了作为全局方法使用。作用域为整个类。一般作为工具类使用,不同的对象可以修改static静态变量的值,
而无法修改const static 静态常量的值。
?
注意:要想在类中建立恒定不变的值,除了用const static外,还可以用enum 枚举实现。
?
举例如下:
// BlankTest.cpp : 定义控制台应用程序的入口点。
//
// const 、 static 、 const static 、 enum 之间的区别与联系
#include "stdafx.h"
#include <iostream>
using namespace std;
?
class myclass
{
????const int m;
public:????static int n;
????const static int mn;
????enum
????{
????????size1 = 50, //枚举变量中没有 ;冒号,只有 , 逗号。
????????size2 = 60
????};
public: //若不加public,则编译错误。友元类无法访问私有成员。
????static void print();
????const void print2();
?
myclass(int a);
};
?
int myclass::n = 10; //静态成员的定义+初始化
const int myclass::mn = 20;
?
myclass::myclass(int a):m(a) //用a 来初始化const成员,此处可以直接写一个 数字,比如10,都是没有问题的。
{
????n += 1;//说明 我们在构造函数里面可以对static变量进行更改
}
?
?
void myclass::print()
{
????cout << "count= " << mn << endl;
}
?
const void myclass::print2()
{
????//m = 20; //错误,错误提示:表达式必须是可修改的左值。
????cout << "const = " << m << endl;
????cout << "static = " << n << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
????myclass a(10);
????a.print();//通过对象访问静态成员函数
????myclass::print();//通过类访问静态成员函数
?
????a.print2();
????a.n += 1; //static 变量是可以更改的。而static const 变量是不可更改的。
????a.print2();
?
????cout <<"enum = "<< a.size1 << endl;
????//a.mn += 1;//error,静态常量无法修改左值。
????return 0;
}
C++ 学习总结 复习篇