1.一个面向对象编程的计算圆面积的程序
#include<iostream>
using namespace std;
class MyCicle{
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*m_r;
return m_s;
}
};
int main(int argc, char const *argv[])
{
//普通方式执行
double r=0,s=0;
cout<<"input the r:"<<endl;
cin>>r;//键盘流入到变量中去
cout<<"r:"<<r<<endl;
s=3.14*r*r;
cout<<"the area is :"<<s<<endl;
//面向对象的方式执行
MyCicle c1; c1.setR(r);//给c1圆形的属性赋值。
cout<<"object______the area is:"<<c1.getS()<<endl;
cout<<"这是中文"<<endl;
return 0;
}
可在当前目录下新建output目录,再进入output目录中 执行 g++ ../yuan.cpp 以便使源文件和目标文件隔离开。
geany编辑器:sudo apt-get install geany
此编译器可以编译,再点击生成,生成与源文件同名的可执行文件,此处生成的文件 即为: yuan
2.注意中英文空格的编码不同
#include"iostream" //此头文件中没有引入标准的std,需要手工写,C++为了和C区分开,规定不使用.h后缀
using namespace std;
namespace namespaceA
{
int a=10;
}
namespace namespaceB
{
int a=20;
namespace namespaceC
{struct Teacher{char name[32];
int age;
};
}
}
int main()
{
using namespace namespaceA ;
std::cout<<"test"<<std::endl;//没有写 using name std 这句代码时,这样引用std
cout<<"tian na"<<endl;
cout<<a<<endl;
namespaceB::namespaceC::Teacher t1;//告诉c++ 我要使用命名空间了
t1.age=33;
cout<<t1.age<<endl;
return 0;
}
C++对比C的增强:
1.在c中不是定义区的定义,不能通过编译,而c++可以
例如:
在main中有如下语句:在c编译器中将报错,而c++不会
int a;
printf(" hello ");
int b;
printf(" a=%d b=%d ",a,b);
2.c不能在寄存器变量(访问速度更快)上取地址,而c++可以。为提高执行效率,C++允许将局部变量的值放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取
例如:register int a=0;
printf("&a :%d ",&a);
3.变量检测增强,以下在c中不报错,在c++中将检测出来:
int a;
int a=33;
void main()
{
printf("a=%d ",a); //做测试可发现,都将打印33;
}
4.struct 类型加强
struct Teacher
{
int age;
};
int main()
{
struct Teacher t1; //c语言必须这么写,而在c++中可不必加上struct
}
ubuntu下编译生成可在Windows下运行的exe文件:
apt-get install mingw32 #提示无法定位,解决方法如下
sudo gedit /etc/apt/sources.list
//在sources.list末尾添加,保存
deb http://us.archive.ubuntu.com/ubuntu trusty main universe
sudo apt-get update
sudo apt-get install mingw32
遇到提示无法获得锁时:1. 查看进程 ps aux | grep apt #列出所有占用apt资源的进程,
结果中,第一列代表用户,第二列是进程id,而我们要做的就是强制结束这个进程;
2.结束其他进程 sudo kill 进程id
3.继续执行你之前的命令
ubuntu下编译cpp文件,编译c文件将g++改为gcc即可
编译命令: i586-mingw32msvc-g++ aa.cpp -o aa.exe
c++中的const:
const int *c; //const修饰的是指针所指向的内存空间,不能被修改
int * const d; //指针变量本身的值不能被修改
c中的const:(冒牌货)
const int a=10; //C++会将const变量放到符号表中单独保存,
int *p=NULL;
p=(int *)&a;//在c++中会重新分配一个内存空间给p,在这个内存空间中修改值对符号表中a的值无影响。
*p=20; //此时a的值已经被修改为20,此处代码放到c++编译器中执行,a的值仍旧为10.
printf("a:%d ",a);
C++会将const变量放到符号表中单独保存,
const与#define:
const常量是由编译器处理的,提供类型检查和作用域检查。宏定义由预编译器处理,单纯的文本替换。
int a=10;
int b=20;
int array[a+b]; //在c或c++中是不支持这种语法现象的,但是在a,b的定义前加 const后是可以通过编译的。