#include<iostream>usingnamespace std;intmain(){int a =0;int b =0;char c ='e';int ret =0;while(1){
cout <<"请输入要计算的两个数字:"<< endl;
cin >> a;
cin >> b;
cout <<"请输入运算法则:+、-、*、/"<< endl;
cin >> c;switch(c){case'+':
ret = a + b;break;case'-':
ret =a - b;break;case'*':
ret = a * b;break;case'/':
ret = a / b;break;default:
ret =0;break;}
cout <<"计算结果:"<< endl;
cout << ret <<endl;}return0;}
#include<string>#include<iostream>usingnamespace std;classcar{public:
string corlor;
string id;void(*printInfo)(string corlor,string id);//这个是函数指针变量voidprintCarInfo()//成员函数在内部实现{
cout <<"成员函数打印"<< endl;
cout <<"汽车颜色:"<< corlor <<"汽车车牌号"<< id <<endl;}voidprintCarInfo2();//成员函数在内部声明,一般在.cpp文件里面实现class中声明的函数};void car ::printCarInfo2(){
cout <<"成员函数在外部实现"<< endl;}voidprintInfo(string a,string b){
string ret ="颜色:"+ a +"车牌号:"+ b;
cout << ret <<endl;}intmain(){
car mycar;
mycar.corlor ="black";
mycar.id ="京A888888";
mycar.printInfo = printInfo;
car mycar2 ={.corlor ="white",.id ="京A666666",.printInfo = printInfo,};
car *mycar3 =newcar();
mycar3 ->id ="冀A88888888";
mycar3 ->corlor ="blue";
mycar3 ->printInfo =printInfo;
mycar.printInfo(mycar.corlor,mycar.id);
mycar2.printInfo(mycar2.corlor,mycar2.id);
mycar3->printInfo(mycar3->corlor,mycar3->id);
cout <<"下面是成员函数输出内容:"<< endl;
mycar.printCarInfo();
mycar2.printCarInfo();
mycar3->printCarInfo();
mycar.printCarInfo2();
mycar2.printCarInfo2();
mycar3->printCarInfo2();return0;}
C++引用的使用
#include<iostream>usingnamespace std;voidswap(int& c,int& d){int temp;
temp = c;
c = d;
d =temp;}double vals[]={1.1,1.2,1.3};double&setvalue(int i){double&ref = vals[i];return ref;}//int& getdata()//{// int a = 10 ,b = 10;// int& ra = a;// return ra; //当返回一个引用时,要注意被引用的对象不能超出作用域,所以返回一个局部变量的的引用是不合法的(函数调用完就将空间释放了),可以返回一个静态变量的引用。//}intmain(){int a =10;int b =20;
cout <<"交换之前:"<< endl;
cout <<"a ="<< a <<endl;
cout <<"b ="<< b <<endl;swap(a,b);
cout <<"交换之后:"<< endl;
cout <<"a ="<< a <<endl;
cout <<"b ="<< b <<endl;setvalue(2)=10.5;//其实就是函数返回vals[2]的引用,就是vals[2]的别名,然后对别名进行操作就是对其本身进行操作,所以引用可以当左值
cout << vals[2]<<endl;return0;}
#include<iostream>//引用变量是一个别名,也就是说,他是某个已经存在变量的另一个名字//引用相当于又给这个内存中的数据提供了一个新的变量名,这个变量名比传统数据名更特殊,是直达地址的/*
引用与指针的区别:
1、不存在空引用,引用必须连接到一块合法的内存
2、一旦引用被初始化一个对象,就不能被指向另一个对象,指针可以在任何时候指向另一个对象
3、引用必须在创建的时候初始化,指针可以在任何时间初始化
4、官方没有明确说明,但是引用确实不是传统意义上的独立变量,他不可以“变”
5、引用和指针一样也区分类型
*/usingnamespace std;intmain(){//声明简单的变量int i;double d;//声明引用变量int& r = i;double& s = d;
i =5;
cout <<"value of i:"<< i << endl;
cout <<"refrence of i:"<< r <<endl;
d =10.121;
cout <<"value of d:"<< d << endl;
cout <<"refrence of d:"<< s <<endl;
cout <<"Hello World!"<< endl;return0;}
#include<iostream>usingnamespace std;intmain(){//c语言在C99以前是不支持boo类型l的,在c99之后支持bool类型,C++是支持的bool flag =false;int a =0;int b =0;if(!flag){
cin >> a >> b;}
cout << a << b << endl;
cout <<"Hello World!"<< endl;return0;}
#include<iostream>usingnamespace std;//在C++中使用初始化列表来初始化类的字段是一种高效的初始化方式,尤其是在构造函数中。初始化列表直接在对象的构造过程中初始化成员变量,//而不是先创建成员变量再赋值,这对于提高性能尤为重要,特别是在涉及到复杂对象或引用和常量成员的情况下/*
初始化列表的有点包括:
1、效率:对于非本类型的对象,使用初始化列表比在构造函数体内赋值更高效,因为他避免了先从默认构造然后再到赋值的额外开销;
2、必要性:对于引用类型和常量类型的成员变量,必须使用初始化列表,因为这些类型成员在构造函数体内不能被赋值;
3、顺序:成员变量的初始化顺序是按照他们在类中声明的顺序,而不是初始化列表中的顺序。
*/classMyClass{private:int a;double b;
string c;public:MyClass(int temp_a,double temp_b,string temp_c)//构造函数{
a = temp_a;
b = temp_b;
c +temp_c;
cout <<"构造函数被调用"<< endl;}MyClass(int temp_a,string temp_c):a(temp_a),c(temp_c)//参数列表的使用方法,一般初始化列表写的顺序和类中声明的顺序相同,否则会有警告。{
cout <<"参数列表的方式进行构造"<< endl;}voidpint(){
cout << a <<endl;
cout << b <<endl;
cout << c <<endl;}};intmain(){
MyClass data(1,1.2,"普通构造函数传参");
MyClass data2(1,"参数列表方式进行构造传参");
data.pint();
data2.pint();return0;}
C++菱形继承
#include<iostream>usingnamespace std;//菱形继承:如果两个基类继承自同一个更高层的基类,这可能导致派生类中存在两份基类的副本,称为菱形继承,可以通过虚继承来解决/*
class Base
{
};
class A : public Base
{
//继承自Base
};
class B : public Base
{
//继承自Base
};
class C : public A, public B
{
//继承自A,B
}; //菱形继承
*/classBase{public:int data;Base(int temp_data){this->data = temp_data;}voidprint1(){
cout << data << endl;}};classA:virtualpublicBase{public://继承自BaseA(int data):Base(data)//当父类有构造函数的时候要继承父类的构造函数{
data =20;}voidprint2(){
cout << data << endl;}};classB:virtualpublicBase//虚继承,来解决菱形继承的问题{public://继承自BaseB(int data):Base(data)//当父类有构造函数的时候要继承父类的构造函数{
data =30;}voidprint3(){
cout << data << endl;}};classC:publicA,publicB{public://继承自A,BC(int data):Base(data),A(data),B(data)//当父类有构造函数的时候,派生类的构造函数要继承其所继承父类的构造函数,并且要按照顺序继承{// this->data = data;}};//菱形继承intmain(){
C c(50);
c.print1();
c.print2();
c.print3();return0;}