強化練習
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <fstream>
using namespace std;
class ABCD
{
public:
ABCD(int a, int b, int c)
{
_a = a;
_b = b;
_c = c;
printf("ABCD() construct, a: %d,b: %d,c: %d \n", _a, _b, _c);
}
~ABCD()
{
printf("~ABCD() construct,a: %d,b: %d,c: %d \n", _a, _b, _c);
}
int getA()
{
return _a;
}
private:
int _a;
int _b;
int _c;
};
class MyE
{
public:
MyE() :abcd1(1, 2, 3), abcd2(4, 5, 6), m(100)
{
cout << "MyE()" << endl;
}
~MyE()
{
cout << "~MyE()" << endl;
}
MyE(const MyE & obj) :abcd1(7, 8, 9), abcd2(10, 11, 12), m(100)
{
printf("MyD(const MyD & obj) \n");
}
public:
ABCD abcd1; //c++編譯器不知道如何構造abc1
ABCD abcd2;
const int m;
};
int doThing(MyE mye1)//mye1.拷貝構造(main::myE)
{
printf("doThing() mye1.abc1.a: %d \n", mye1.abcd1.getA());
return 0;
}
int run()
{
MyE myE;
doThing(myE);
return 0;
}
int run2()
{
printf("run2 start.. \n");
//ABCD(400, 500, 600); //臨時物件的?命周期
ABCD abcd = ABCD(100, 200, 300);
printf("run2 end\n");
return 0;
}
int main(void)
{
run2();
return 0;
}
強化練習2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <fstream>
using namespace std;
//構造中調?構造是危險的?為
class MyTest
{
public:
MyTest(int a, int b, int c)
{
_a = a;
_b = b;
_c = c;
}
MyTest(int a, int b)
{
_a = a;
_b = b;
MyTest(a, b, 100);//創建一個匿名物件
//
}
~MyTest()
{
printf("MyTest~: %d, %d, %d\n", _a, _b, _c);
}
int getC()
{
return _c;
}
void setC(int val)
{
_c = val;
}
private:
int _a;
int _b;
int _c;
};
int main()
{
MyTest t1(1, 2);
printf("c: %d\n", t1.getC()); //請問c的值是?
return 0;
}
- 物件的動態構造和釋放
- malloc free函式,new delete 運算子號
- 分配基礎型別 、分配陣列型別、分配物件
- new和malloc 深入分析,混用測驗、異同比較
- 匿名物件生命周期
- malloc free函式,new delete 運算子號
- 分配基礎型別 、分配陣列型別、分配物件
- new和malloc 深入分析,混用測驗、異同比較
- 匿名物件總結
- 匿名物件生命周期
- 匿名物件去和留
- 構造中呼叫構造
- 匿名物件去和留
- 構造中呼叫構造
- 靜態成員變數和靜態成員函式(屬于類,語法)
new和delete
c與c++的比較
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <fstream>
using namespace std;
class Test
{
public:
Test()
{
cout << "Test()" << endl;
m_a = 0;
m_b = 0;
}
Test(int a, int b)
{
cout << "Test(int, int)" << endl;
m_a = a;
m_b = b;
}
void printT()
{
cout << "printT:"<<m_a<<","<<m_b << endl;
}
~Test()
{
cout << "~Test()" << endl;
}
private:
int m_a;
int m_b;
};
//C語言中
void test1()
{
int *p = (int *)malloc(sizeof(int));
*p = 10;
if (p != NULL) {
free(p);
//delete p;
p = NULL;
}
int *array_p = (int *)malloc(sizeof(int)* 10);
for (int i = 0; i < 10; i++) {
array_p[i] = i + 1;
}
for (int i = 0; i < 10; i++) {
printf("%d ", array_p[i]);
}
printf("\n");
if (array_p != NULL) {
free(array_p);
array_p = NULL;
}
cout << "==============" << endl;
Test *tp = (Test*)malloc(sizeof(Test));
tp->printT();
if (tp != NULL) {
free(tp);
tp = NULL;
}
}
//malloc free 是函式,標準庫,stdlib.h
//new 在堆上初始化一個物件的時候,會觸發物件的建構式,malloc不能
//free并不能觸發一個物件的解構式,
//C++中
void test2()
{
int *p = new int;
*p = 10;
if (p != NULL) {
free(p);
p = NULL;
}
int *array_p = new int[10];
for (int i = 0; i < 10; i++) {
array_p[i] = i + 1;
}
for (int i = 0; i < 10; i++) {
cout << array_p[i]<<" ";
}
cout << endl;
if (array_p != NULL) {
delete [] array_p;
}
cout << "==========" << endl;
//Test *tp = new Test(10, 20);//觸發有參構造
Test *tp = new Test;//觸發無慘構造
tp->printT();
if (tp != NULL) {
delete tp;
tp = NULL;
}
}
int main(void)
{
test1();
cout << "-----------" << endl;
test2();
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/79216.html
標籤:C++
上一篇:c++-建構式
下一篇:c++-static
