照着https://www.w3cschool.cn/cpp/,把C++的基础概念顺了一遍,虽然很久没用C++,还是整理一下。

#include "stdafx.h";
#include <iostream>//定义了一些头文件,这些头文件包含了程序中必需的或有用的信息,这里是包含了头文件 <iostream>
#include <fstream>
#include <cstring>
#include <string>
#include <ctime> using namespace std;//告诉编译器使用 std 命名空间。命名空间是 C++ 中一个相对新的概念。 class Box
{
double privatevalue;//默认私有变量,或者用private声明
public:
double length; // Length of a box
double breadth; // Breadth of a box
double height; // Height of a box
/*类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。
尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。
友元可以是一个函数,该函数被称为友元函数;
友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。
声明类 ClassTwo 的所有成员函数作为类 ClassOne 的友元,需要在类 ClassOne 的定义中放置如下声明:
friend class ClassTwo;
如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend*/
friend void printLength( Box box );//友元函数
//Box();//构造函数
//double getVolume(void);//此定义可以在类定义的外部进行函数实现;
void setLength( double len ){
length = len;
} double getVolume(void)// 返回体积
{
return length * breadth * height;
} Box()//构造函数
{
cout << "Box class is being created" << endl;
}
~Box()//析构函数
{
cout << "Object is being deleted" << endl;
}
}; // 基类
class Shape
{
public:
void setWidth(int w)
{
width = w;
}
void setHeight(int h)
{
height = h;
}
protected:
int width;
int height;
}; // 派生类
class Rectangle: public Shape //class <派生类名>:<继承方式><基类名>
{
public:
int getArea()
{
return (width * height);
}
}; //内联函数
inline int Max(int x, int y)
{
return (x > y)? x : y;
}
void getSeconds(unsigned long *par);
double getAverage(int *arr, int size);
int * getRandom();
double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0}; double& setValues( int i )
{
return vals[i]; // 返回第 i 个元素的引用
}
void swap(int& x, int& y); int main()
{
//cout << "Hello World\r\n"; // 输出 Hello World ////C风格字符串 include <cstring>
//cout << "C风格字符串 include <cstring>\r\n";
//char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
//cout << "C风格字符串(char数组): ";
//cout << greeting << endl; ////C++风格字符串 include <string>
//cout << "C++风格字符串 include <string>\r\n";
//string str1 = "Hello";
//string str2 = "World";
//string str3;
//int len ;
//// 复制 str1 到 str3
//str3 = str1;
//cout << "str3 : " << str3 << endl;
//// 连接 str1 和 str2
//str3 = str1 + str2;
//cout << "str1 + str2 : " << str3 << endl;
//// 连接后,str3 的总长度
//len = str3.size();
//cout << "str3.size() : " << len << endl; ////C++变量地址
//cout << "C++变量地址\r\n";
//int var1;
//char var2[10];
//cout << "var1 变量的地址: ";
//cout << &var1 << endl;
//cout << "var2 变量的地址: ";
//cout << &var2 << endl; ////C++指针
////指针存储的是指向的地址,*指针:代表指向变量的值;
//cout << "C++指针\r\n";
//int var = 20; // 实际变量的声明
//int *ip; // 指针变量的声明
//ip = &var; // 在指针变量中存储 var 的地址
//cout << "Value of var variable: ";
//cout << var << endl;
//// 输出在指针变量中存储的地址
//cout << "Address stored in ip variable: ";
//cout << ip << endl;
//// 访问指针中地址的值
//cout << "Value of *ip variable: ";
//cout << *ip << endl; ////C++传递指针给函数
//cout << "C++传递指针给函数\r\n";
//unsigned long sec; //实际存储时间数值的变量
//getSeconds( &sec );//&sec时间数值的地址
//cout << "Number of seconds :" << sec << endl; ////函数接受数组作为参数
//cout << "函数接受数组作为参数\r\n";
////带有5个元素的整型数组
//int balance[5] = {1000, 2, 3, 17, 50};
//double avg;
//// 传递一个指向数组的指针作为参数,balance数组名代表数组的指针?
//avg = getAverage(balance, 5) ;
//// 输出返回值
//cout << "Average value is: " << avg << endl; ////C++从函数返回指针
//cout << "C++从函数返回指针\r\n";
////一个指向整数的指针
//int *p;
//p = getRandom();
//for ( int i = 0; i < 10; i++ )
//{
// cout << "*(p + " << i << ") : ";
// cout << *(p + i)<<"-"<<p[i] << endl;//*(p+i)=p[i]
//} /*
===C++ 引用===
引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。
一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
===C++ 引用 vs 指针===
引用很容易与指针混淆,它们之间有三个主要的不同:
不存在空引用。引用必须连接到一块合法的内存。
一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
引用必须在创建时被初始化。指针可以在任何时间被初始化。
*/ ////C++引用示例
//cout << "C++引用示例\r\n";
//// 声明简单的变量
//int i;
//double d;
//// 声明引用变量
//int& r = i;
//double& s = d;
//i = 5;
//cout << "Value of i : " << i << endl;
//cout << "Value of i reference : " << r << endl; //d = 11.7;
//cout << "Value of d : " << d << endl;
//cout << "Value of d reference : " << s << endl; ////C++ 把引用作为返回值
//cout << "C++ 把引用作为返回值\r\n";
//cout << "改变前的值" << endl;
//for ( int i = 0; i < 5; i++ )
//{
// cout << "vals[" << i << "] = ";
// cout << vals[i] << endl;
//} //setValues(1) = 20.23; // 返回的是引用,改变第 2 个元素
//setValues(3) = 70.8; // 返回的是引用,改变第 4 个元素 //cout << "改变后的值" << endl;
//for ( int i = 0; i < 5; i++ )
//{
// cout << "vals[" << i << "] = ";
// cout << vals[i] << endl;
//} ////C++ 把引用作为参数
//cout<< "C++ 把引用作为参数\r\n";
////局部变量声明
//int a = 100;
//int b = 200;
//cout << "交换前,a 的值:" << a << endl;
//cout << "交换前,b 的值:" << b << endl;
///* 调用函数来交换值 */
//swap(a, b); //cout << "交换后,a 的值:" << a << endl;
//cout << "交换前,b 的值:" << b << endl; ////C++ 类定义
//Box Box1; // 声明 Box1,类型为 Box
//Box Box2; // 声明 Box2,类型为 Box
//double volume = 0.0; // 用于存储体积 ////box 1 详述
//Box1.height = 5.0;
//Box1.length = 6.0;
//Box1.breadth = 7.0; ////box 2 详述
//Box2.height = 10.0;
//Box2.length = 12.0;
//Box2.breadth = 13.0; ////box 1 的体积
//volume = Box1.height * Box1.length * Box1.breadth;
//cout << "Box1 的体积:" << volume <<endl; ////box 2 的体积
//volume = Box2.height * Box2.length * Box2.breadth;
//cout << "Box2 的体积:" << volume <<endl; ////C++的继承
//cout<< "C++的继承\r\n";
//Rectangle Rect;
//Rect.setWidth(5);
//Rect.setHeight(7);
////输出对象的面积
//cout << "Total area: " << Rect.getArea() << endl; ////C++的内联函数
////cout << "C++的内联函数\r\n";
//cout << "Max (20,10): " << Max(20,10) << endl;
//cout << "Max (0,200): " << Max(0,200) << endl;
//cout << "Max (100,1010): " << Max(100,1010) << endl; ////C++的友元函数
////cout << "C++的友元函数\r\n";
//Box box;
////使用成员函数设置宽度
//box.setLength(10.0);
////使用友元函数输出宽度
//printLength( box ); /*
===虚函数===
虚函数 是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数(不的调用基类的方法,而是动态子类的方法实现)。
我们想要的是在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为动态链接,或后期绑定。 ===纯虚函数===
您可能想要在基类中定义虚函数,以便在派生类中重新定义该函数更好地适用于对象,
但是您在基类中又不能对虚函数给出有意义的实现,这个时候就会用到纯虚函数。
virtual int area() = 0;
*/ //控制台输入
int in;
cin>>in;
return ;
} //请注意:printWidth() 不是任何类的成员函数
void printLength( Box box )
{
/* 因为 printWidth() 是 Box 的友元,它可以直接访问该类的任何成员 */
cout << "Width of box : " << box.length <<endl;
} void getSeconds(unsigned long *par)
{
// 获取当前的秒数
*par = time( NULL );//*par par是时间数值的地址,*par是代表时间数值的实际值
return;
} double getAverage(int *arr, int size)
{
int i, sum = ;
double avg; for (i = ; i < size; ++i)
{
sum += arr[i];
} avg = double(sum) / size; return avg;
} //要生成和返回随机数的函数
int * getRandom()
{
static int r[];
//设置种子
srand((unsigned)time(NULL));
for (int i = ; i < ; ++i)
{
r[i] = rand();
cout << r[i] << endl;
}
return r;
} void swap(int& x, int& y)
{
int temp;
temp = x; /* 保存地址 x 的值 */
x = y; /* 把 y 赋值给 x */
y = temp; /* 把 x 赋值给 y */ return;
}

C++基本概念复习的更多相关文章

  1. TCP&IP基础概念复习

    第一章概述 NII(National Information Infrastructure):国家信息基础设施 GII(Global Information Infrastructure):全球信息基 ...

  2. 【读书笔记】--SQL基础概念复习

    主键:每个表,只能有一个主键,主键不能为NULL,且必须是唯一的.主键最好是由单个列组成,但这不是必须的,主键也可以是由多个列组成,如果表的两个列组合在一起能唯一标识一个行,而单个列不能,则可以将这两 ...

  3. [机器学习] ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)

    引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等,主要学习资料来自网上的免费课程和一些经典书籍,免费课 ...

  4. 皮尔逊相似度计算的例子(R语言)

    编译最近的协同过滤算法皮尔逊相似度计算.下顺便研究R简单使用的语言.概率统计知识. 一.概率论和统计学概念复习 1)期望值(Expected Value) 由于这里每一个数都是等概率的.所以就当做是数 ...

  5. 皮尔森相似度计算举例(R语言)

    整理了一下最近对协同过滤推荐算法中的皮尔森相似度计算,顺带学习了下R语言的简单使用,也复习了概率统计知识. 一.概率论和统计学概念复习 1)期望值(Expected Value) 因为这里每个数都是等 ...

  6. python就业班-淘宝-目录.txt

    卷 TOSHIBA EXT 的文件夹 PATH 列表卷序列号为 AE86-8E8DF:.│ python就业班-淘宝-目录.txt│ ├─01 网络编程│ ├─01-基本概念│ │ 01-网络通信概述 ...

  7. 【Golang 接口自动化02】使用标准库net/http发送Post请求

    写在前面 上一篇我们介绍了使用 net/http 发送get请求,因为考虑到篇幅问题,把Post单独拎了出来,我们在这一篇一起从源码来了解一下Golang的Post请求. 发送Post请求 net/h ...

  8. day39 算法基础

    参考博客: http://www.cnblogs.com/alex3714/articles/5474411.html http://www.cnblogs.com/wupeiqi/articles/ ...

  9. SQL JOIN--初级篇

    写在前面的话: 以下是最简单的join原理,为后面的大数据分布式join做概念复习和知识铺垫: 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. JOIN: 如果 ...

随机推荐

  1. CentOS7使用systemctl添加自定义服务

    一.简介 Centos7开机第一个程序从init完全换成了systemd这种启动方式,同centos 5 6已经是实质差别.systemd是靠管理unit的方式来控制开机服务,开机级别等功能. 在/u ...

  2. LNMP-day3-php扩展缓存插件

     perl的编译问题 [root@localhost php5.6.33]# echo 'export LC_ALL=C' >> /etc/profile #设置环境变量,解决后面perl ...

  3. December 11th 2016 Week 51st Sunday

    If a thing is worth doing it is worth doing well. 如果事情值得做,那就做好. If it is worth doing, then it is wor ...

  4. Vue中$refs的用法

    说明:vm.$refs 一个对象,持有已注册过 ref 的所有子组件(或HTML元素) 使用:在 HTML元素 中,添加ref属性,然后在JS中通过vm.$refs.属性来获取 注意:如果获取的是一个 ...

  5. Mysql中的char与varchar length()与char_length()

    在mysql中,char和varchar都表示字符串类型.但他们存储和检索数据的方式并不相同. 在表结构定义中声明char和varchar类型时,必须指定字符串的长度.也就是该列所能存储多少个字符(不 ...

  6. POJ1066 Treasure Hunt

    嘟嘟嘟 题意看题中的图就行:问你从给定的点出发最少需要穿过几条线段才能从正方形中出去(边界也算). 因为\(n\)很小,可以考虑比较暴力的做法.枚举在边界中的哪一个点离开的.也就是枚举四周的点\((x ...

  7. cesium.js 设置缩放最大最小限制

    viewer.scene.screenSpaceCameraController.minimumZoomDistance = 1200;viewer.scene.screenSpaceCameraCo ...

  8. 非法字符:“\ufeff”

    解决方法 将编码格式UTF-8+BOM文件转为普通的UTF-8文件. 用Notepad++打开文件,将编码从UTF-8+BOM改为UTF-8

  9. CentOS7安装Oracle11g R2

    文章摘抄自:一支小白,博客地址:http://www.cnblogs.com/startnow/p/7580865.html Centos7安装Oracle 11gR2     =========== ...

  10. iOS-Cordova集成开发,已有项目集成cordova

    iOS-Cordova集成开发,已有项目集成cordova 项目组准备开发一个APP,要求Android和iOS端页面完全一致,除了一个页面跟业务相关的不同,其他界面基本一致,因此,萌生一个想法,关于 ...