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”<std::endl;
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;
}
---------------------
作者:丶幻一
来源:CSDN
原文:https://blog.csdn.net/qq_25956141/article/details/79426121
版权声明:本文为博主原创文章,转载请附上博文链接!