C++基础一

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后是可以通过编译的。


原文地址:https://www.cnblogs.com/wddx5/p/12714952.html