【C++学习】 C++初探(1)

(一)背景介绍

经过了半个暑假的忙碌现在终于有机会回到家里休息两天。可发现回家也没有什么事情可干,干脆再学些东西吧。当下我最需要学习的语言我认为是C++,经过仔细的需求分析后我发现现在,学习C++是最合适也是受益最高的时期。
一方面是面向对象的程序设计思想是我必须要抓紧学习的,反正学校也不教,还是得要自己去学。另外一方面就我想要从事的方向来说,C++可以做的事情也暂时是最丰富。
首先C++可以让我接触另外一种编程思想,此外QT的编程语言也是C++, 在了解QT后我发现学习QT是一件很划算的事情,学会QT你就可以同时完成桌面应用程序,安卓APP,基于QT界面的LINUX上层开发,除了QT,C++现在在图像处理方面好像也是十分常用,所以我认为现在C++是非学不可。正好在家就耐下性子认真学习一下吧。

(二)课后练习

1.第一个C++程序“HELLOWORLD”

  #include "iostream"
//该头文件没有引入标准命名空间
//using namespace std;
//std中包涵了cout cin endl ...
void main()
{

	using namespace std;
	//左移操作符
	//endle回车换行
	cout << "helloworld "<<endl;
    system("pause");

}

2.C++面向对象编程的体现

我个人的理解是这样的,所谓面向过程,就是按照事情的发展方向去写程序,你要事情如何发展就如何去写程序。而所谓面向对象就是通过结构体或者是类的方式将同一类的物质的所有属性聚合起来此时由这个类定义的对象就可以抽象为一个现实的物体。

我就用C语言初学时一个非常经典的例子来体现,输入半径求周长
程序对比:

面向过程:


void main()
{
	double r = 0, s = 0;
	cout << "请输入半径:";
	//标准输入
	cin >> r;
	s = 3.14*r*r;
	cout << "圆的面积是:" << s << endl;
	system("pause");
}

面向对象:


//面向对象的操作方式
//定义一个结构体
//
struct circle
{
	double m_s;
	double m_r;

};

class mycircle
{
public:
	double m_s;
	double m_r;
public:
	void setR(double r)
	{
	
		m_r = r;
	}
	double getr()
	{
		return m_r;
	}
	double getS()
	{
		m_s = 3.14*m_r * 2;
		return m_s;
	}
};


void main()
{
	mycircle c1, c2, c3;
	double r1,r2,r3;
	cout << "请输入C1圆的半径:"<<endl ;
	cin >> r1;
	cout << "请输入C2圆的半径:"<<endl ;
	cin >> r2;
	cout << "请输入C3圆的半径:"<<endl ;
	cin >> r3;
	c1.setR(r1);
	c2.setR(r2);
	c3.setR(r3);
	cout << "圆c1的面积是:" << c1.getS() << endl;
	cout << "圆c2的面积是:" << c2.getS() << endl;
	cout << "圆c3的面积是:" << c3.getS() << endl;
	system("pause");
}

//实现目标必须通过成员函数实现。
//分析:因为没有成员函数,所有的数值会在初始化的时候赋值,如果没有调用成员函数,调用值只是传递值的过程

个人认为所谓面向对象在编程上的区别就在于,在于变量的处理上。面向过程的语言经常就是变量之间彼此独立,而他们之间的逻辑联系体现在过程中,我们通过已知的变量在过程中推导其他。
而面向对象,集中体现在类的存在,我们可以在类中,直接通过成员函数将变量之间的逻辑联系先写清楚。然后再在程序中直接调用。这样写无疑是非常有好处的,这非常明显也体现出了,面向对象的程序编程语言的优越性。这仅在小函数上是无法体现的。但是我之前已经写过了几个比较大型的工程。我非常能感觉到这种思路的优越性。不光是C++我认为在C语言编程也是可以通过结构体实现类似的效果,虽然无法实现成员函数的功能,但对于变量的管理将方便许多,不会再出现每个函数的开头都要定义一堆变量的现象,还有效的避免了许多全局变量的使用,是非常有意义的。

3.namesapce的应用

我想namespace的存在也是C++区别于C,优越于C的另外一点,他通过定义不同的变量域有效的解决了之前C语言标志符重名而发生错误的情形(之前经常会遇到,而且难以处理)。
应用举例:

//定义命名空间

namespace SpaceA
{
	int a = 10;
	struct Teacher1
	{
		char name[32];
		int age;
	};
};


namespace SpaceB
{
	int a = 20;
	struct Teacher2
	{
		char name[32];
		int age;

	};

};


void main()
{
	using namespace SpaceA;
	using namespace SpaceB;
	cout <<SpaceA::a;


	system("pause");
}

4.C++的引用

(1)引用可以看作已定义变量的别名
using namespace std;
void main()
{
	int a = 10;
	int &b = a;
	//普通引用一定要出始化
//b就是a,a就是b
	b = 100;//此时a=b=100两者共享一个内存空间
	cout << a << endl << b << endl;
	system("pause");

}
(2)引用的使用:

不必再通过指针的方式实现函数间的数据公用

using namespace std;
void myswap(int &a, int &b)
{
	int c = 0;
	c = a;
	a = b;
	b = c;

}
void main()
{
	int x = 10, y = 20;

	myswap(x, y);
	cout << x << endl << y << endl;

	system("pause");

}
(3)复杂数据类型的引用

using namespace std;
struct teacher
{
	char name[32];
	int age;

};
//在这里对于pT的修改就是对于t1的修改
void printfT(teacher &pT)
{
	cout << pT.age << endl;
	pT.age = 45;
}


void main()
{
	teacher t1;
	t1.age = 35;
	printfT(t1);
	cout << t1.age << endl;
	system("pause");

}
(4)对于引用的思考

引用可以作为指针的替代品具有良好的可读性
引用也占内存空间,非常像指针所占的内存空间大小
引用在C++内部其实就是一个常量指针

5.C与C++其他的几点不同

1)寄存器变量的加强

2)struct关键字的加强:

在C语言中使用struct 类型定义必须再写一次struct
struct teacher
{
char name[32];
}

teacher t1;
在C语言中是无法编译通过的,但是再C++中是可以编译成功的。
此外struct,在C++中获得了类似class的用法。

3)对于函数的类型检测更加严格

4)新增bool数据类型

5)Const变量的增强,

在C语言中const变量的值是可以通过指针访问的方式去改变其值,这是非常危险的C++不行。在C++中,采用一种列表的方式去存储const 变量

//const C++与C的不同
//在C语言中被定义的常量貌似是一个不能被修改的常量
//但是可以通过内存访问的方式改变值
//在C++语言中const是一个真正的常量
//原因分析:C++编译器对于const 进行加强
//当检测到const 变量会被放在符号表中当你使用变量会从符号表中取出
//当你取地址时,编译器会再次定义一个变量,是无法改变原值的
//当你取地址的时候实际就在访问另外一个变量
//void main()
//{
// const int a=0;
// int const b=0;//变量值不能被修改
//
// const int *c;//指针指向内存空间无法改变
//
//
//}

6)C++中算数运算语句返回值,

是一个变量不再是一个常量,是可以同时赋左值和右值的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

与光同程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值