C++快速入门--1

本课程适合拥有C语言基础,和面向对象基础的同学

C++helloword

#include "iostream"
using namespace std;
int main(){
	cout<<"helloword"<<endl;
	//cout<< 为标准输出函数  endl为换行
	return 0;
}

面向过程和面向对象的对比

用求圆面积和周长的例子来对比面向对象和面向过程的不同实现

//面向过程的方法
int main(){
	double r = 0;
	double s = 0;
	double c = 0;
	cout<<"请输入圆的半径";
	cin >> r;	//标准输入
	const double pi = 3.14;
	s = pi*r*r;
	c = 2 * r * pi;
	cout<<"圆的面积是"<<s<<endl;
	cout<<"圆的周长是"<<c<<endl;
	return 0;
}

//面向对象的思路解决这问题
class CirCle{
private:
	double m_s;
	double m_r;
	double m_c;
public:
	void setR(double r){
		this->m_r = r;
	}
	double getR(){
		return this->m_r;
	}
	double getS(){
		return this->m_r * m_r * 3.14;
	}
	double getC(){
		return this->m_r * 2 * 3.14;
	}
};
int main(){
	CirCle c1,c2;
	double r;
	cout<<"输入c1圆的半径"<<endl;
	cin>> r;
	c1.setR(r);
	cout<<"c1圆的面积是"<<c1.getS()<<endl;
	cout<<"c1元的周长是"<<c1.getC()<<endl;
	return 0;
}

有人可能在circle类中没有写函数,而是在声明时直接将m_s = m_r * m_r * 3.14,这样的情况下,它只在class初始化的时候用,而在以后调用的时,不会再执行m_r * m_r * 3.14;

c++中的命名空间

C++中的命名空间跟C#中的含义是一样的,引用命名空间直接使用
using namespace 空间名称即可,如上文helloword所示,如需自定义命名空间,可用如下方式定义

namespace namespaceA{
	class A{
		
	};
}

当你没有引入该引用的命名空间而使用了该命名空间下的内容的时,就需要使用命名空间名::使用的类名,例如std::cout<<“hello”

C++中的结构体

你完全可以像使用class一样来使用结构体,在C++中你可以像如下方式使用:

typedef struct Teacher{
	public :
	int num;
	public :
		void sayHello(){
			cout<<"hello"<<endl;
		}
}Teacher;

C和C++中的左值表达式之三目运算符

在java中,只见过 int i = 2>1?3:4;
但是在c和c++中,居然可以这么写

//c中
	int a = 10;
	int b = 20;
	*(a>b?&a:&b) = 30;
	printf("%d",b);
//c++中
	(a>b&a:b) = 30;	

C++中的引用

什么是C++中的引用呢?举个具体的例子,来看一段代码

	int a = 10;
	int &b = a;	//用&符号表示引用
	a = 100;
	cout<<a<<endl;
	cout<<b<<endl;
	b = 200;
	cout<<a<<endl;
	cout<<b<<endl;
	//以上依打印100 100 200 200

是不是跟指针很类似呢?这里也就是让a和b都指向同一个内存空间
这里可以理解成a和b是同一个变量,并且在引用的时候应该初始化
在形参中使用引用

void swap(int &a,int &b){
	int q = a;
	a = b;
	b = q;
}

以上的原理跟指针是一样的,只是在c++中可以直接用引用达到同样的效果
当引用成为返回值的时候,只能是全局变量或者静态变量或者动态内存分配的变量,如果只是普通的局部变量,可能会出现某些问题,例如,你返回引用之后,该内存会被释放,虽然C++尽量做了优化,但是有时还是会参数不可避免的问题

//想这种写法就是不行的
int & getB(){
	int b = 10;
	return b;
}

int main(){
	int b = getB();
	cout<<b<<endl;
	return 0;
}

以上b变量会在getB()函数结束时释放,在main方法中有时能打印到其值的原因可能是b所占的内容还没有被系统中其他内容所覆盖。所以应该修改程静态,这时变量在函数结束时不会被释放,在程序结束时才释放。

int & getB(){
	static int b = 10;
	return b;
}

int main(){
	int b = getB();
	cout<<b<<endl;
	return 0;
}

当然你还可以使用动态内存分配

int & getB(){
	int *b = (int *)malloc(sizeof(int));
	*b = 10;
	return *b;
}

int main(){
	int *b = &getB();
	cout<<*b<<endl;
	free(*b);
	return 0;
}

在C++中,引用还可以被当做左值

int & getB(){
	static int b = 10;
	cout<<b<<endl;
	return b;
}

int main(){
	getB() = 100;
	getB();
	return 0;
}

你可能感兴趣的:(C,C++)