设为首页 加入收藏

TOP

const对象,NULL和nullptr,C++中创建对象数组
2015-07-20 17:51:21 来源: 作者: 【 】 浏览:2
Tags:const 对象 NULL nullptr 创建
??

1.定义成了const之后的类

#include 
  
   
class area
{
public:
	int x;
	int y;
	mutable int z;  //不受const约束的类成员
	area() :x(10), y(10), z(2)
	{
		
	}
	void printxy()const  //不可以访问类中局部变量
	{
		z = z + 1;
		std::cout << x << "  " << y  << "  " <<  z  << "\n";
	}
	void add(int a)
	{
		x += a;
		y -= a;
	}
	void go()const
	{
	}
protected:
private:
};

void main()
{
	//const对象不可以引用非const成员函数
	//不可以改变内部变量,mutable例外
	const area * const p = new area;
	p->go();
	//p->add();
	//p = new area;//指针可以改变

	const area area1;
	area1.printxy();
	//area1.add(1);
	area1.go();
	//area1.x = 10;
	//这一句说明当把类定义成const之后,定义成了mutable的值z可以修改
	area1.z += 4;
	area1.printxy();
	std::cin.get();
}

  

运行结果:

\

2.NULL和nullptr

#include 
  
   

void go(int num)
{
	std::cout << "gonum" << std::endl;
}

void go(void *p)
{
	std::cout << "gop" << std::endl;
}

//C++中的NULL的类型是int ,0
void main()
{
	//C++是强类型,严格的类型检查
	void *p = nullptr;//C++的null
	go(p);   //结果为gop  //根据类型来处理
	go(NULL);  //会调用go(int num)  结果为gonum
	go(nullptr);  //结果为gop
	std::cin.get();
}

  

3.QT中button和Line_edit操作相关的

QString  str1=ui->lineEdit->text();
QString  str2=ui->lineEdit_2->text();
QString str3=str1+str2;
ui->lineEdit_3->setText(str3);

QString  str1=ui->lineEdit->text();//获取文本
QString  str2=ui->lineEdit_2->text();
int  db1=str1.toInt();
int  db2=str2.toInt();//转换
int  db3=db1+db2;
QString str3;
str3.setNum(db3);//函数可以重载,很多个类型
ui->lineEdit_4->setText(str3);//设置文本

将QString转换成为字符串的是:str3.toStdString().c_str;

4.new delete和malloc,free相关

#include
  
   
#include 
   
     class myclassA { public: myclassA() { std::cout << "create\n"; } ~myclassA() { std::cout << "delete\n"; } protected: private: }; void main() { //new delete自动调用构造析构 myclassA *p = new myclassA; delete p; //只会分配内存,释放内存,不会对内存进行操作 myclassA *p1 = (myclassA *)malloc(sizeof(myclassA)); free(p1); std::cin.get(); } 
   
  

案例2


 
#include
  
   

class myclass
{
public:
	int x;
	int y;
public:
	myclass(int a, int b) :x(a), y(b)
	{
		std::cout << "构造哦" << std::endl;
	}
	myclass()
	{
	}
	~myclass()
	{
		std::cout << "销毁哦" << std::endl;//
	}

public:
	void printxy();
protected:
private:
};
void myclass::printxy()
{
	std::cout << x << "  " << y << std::endl;
}
myclass class1(10, 11);//全局变量优先main函数
myclass class2(11, 12);

void change1(myclass **pp)
{
	*pp = &class2;
}
void change2(myclass * &p)
{
	p = &class1;
}

void  main22()
{
	myclass *p = &class1;
	p->printxy();
	change1(&p);
	p->printxy();
	change2(p);
	p->printxy();
	std::cin.get();
}

void main11()
{
	//myclass *p = new myclass;
	myclass *p(new myclass(10, 9));//构造函数初始化
	p->printxy();
	myclass  class1(20, 1);
	myclass ** pp = &p;//二级指针存储一级指针的地址
	(*pp)->printxy();//一级类指针
	(**pp).printxy();//0级类指针
	std::cin.get();
}

void main122()
{
	//myclass *p = (myclass *)malloc(sizeof(myclass));
	//free(p);
	myclass *p = new myclass;
	delete p;

	std::cin.get();
}

  
5.创建对象数组

#include "dialog.h"
#include 
  
   

class morewindow
{
public:
    Dialog *p[5];
    morewindow()
    {
        for(int i=0;i<5;i++)
         {
             p[i]=new Dialog;
             p[i]->show();
             p[i]->move(i*100,i*100);
         }
    }
    ~morewindow()
    {
        for(int i = 0;i<5;i++)
        {
            delete p[i];
        }
    }
    Dialog * operator [](int i)
    {
        return p[i];
    }
};


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    morewindow more1;
    more1[3]->hide();//重载下标

    return a.exec();
}

  

6.创建对象数组

#include "mainwindow.h"
#include 
   
    
#include
    
      class more
     windows { public: MainWindow *p[5];//指针数组,每一个元素是指针 morewindows() { for(int i=0;i<5;i++) { p[i]=new MainWindow; p[i]->show(); p[i]->move(i*100,i*100); } } ~morewindows() { for(int i=0;i<5;i++) { delete p[i]; } } }; class morewindowss { public: MainWindow *p[5][4]; morewindowss() { for(int i=0;i<5;i++ ) { for(int j=0;j<4;j++) { p[i][j]=new MainWindow; p[i][j]->show(); p[i][j]->move(i*130,j*130); } } } ~morewindowss() { for(int i=0;i<5;i++ ) { for(int j=0;j<4;j++) { delete p[i][j]; } } } }; //int a[5] int *p=a; int *p= new int[5]; //int *a[5] int **p=a int **p=new (int *)[5]; //int *a[3][5] //int * (*p)[5] class morewindowsss { public: MainWindow **p;//二级指针 morewindowsss() { // p= (MainWindow **)malloc(sizeof(MainWindow *)*5); } void init(int num) { p= new MainWindow * [5];//new的时候类型不需要加上括号 for(int i=0;i<5;i++) { p[i]=new MainWindow; p[i]->show(); p[i]->move(num*100,i*100); } } void move(int x,int y) { for(int i=0;i<5;i++) { p[i]->move(x*100,y*100); } } morewindowsss & operator = (morewindowsss const & more)//自己写的深拷贝 { qDebug()<<"shen"; this->p = new MainWindow * [5]; for(int i=0;i<5;i++) { p[i]=new MainWindow; p[i]->show(); p[i]->move(500,i*100); } return *this; } ~morewindowsss() { for(int i=0;i<5;i++) { delete p[i]; } delete [] p; // free(p); } }; class morewindowssss { public: // MainWindow *p[5][4];//二维数组,每一个元素都是指针 MainWindow **pA;//二级指针 MainWindow *(*p)[4];//指向二维指针数组的指针 morewindowssss() { pA=new MainWindow *[20];//一维数组 p=(MainWindow *(*)[4]) pA; for(int i=0;i<5;i++ ) { for(int j=0;j<4;j++) { p[i][j]=new MainWindow; p[i][j]->show(); p[i][j]->move(i*130,j*130); } } } ~morewindowssss() { for(int i=0;i<5;i++ ) { for(int j=0;j<4;j++) { delete p[i][j]; } } delete [] pA; } }; int main(int argc, char *argv[]) { QApplication a(argc, argv); morewindowsss more1; more1.init(1); // more1.move(1,2); morewindowsss more2;//拷贝构造 more2=more1;//赋值 // morewindowsss more2(more1); more2.move(3,4); return a.exec(); } 
    
   

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UVA 11888 - Abnormal 89's(M.. 下一篇CodeForces 460C--- Present(二..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++ 语言社区-CSDN社 (2025-12-24 17:48:24)
·CSDN问答专区社区-CS (2025-12-24 17:48:22)
·C++中`a = b = c`与` (2025-12-24 17:48:19)
·C语言结构体怎么直接 (2025-12-24 17:19:44)
·为什么指针作为c语言 (2025-12-24 17:19:41)